Macierze automatyczne uzupełnianie

0

Witam,
mam program który tworzy macierz i nie wiem:

  1. jak napisać część programu by w macierzy automatycznie uzupełniła się komorka [1,1],[2,2] itp?
  2. program służy do obliczania stopni wierzchołków w grafie, chciałbym by pytał tylko czy jest polaczenie miedzy [1,2] i automatycznie wrzucał ta sama wartosc do [2,1]

z gory dzieki za pomoc

0

Ad. 1 - Używając numpy możesz ustawiać dowolne wpisy w macierzy np. poprzez macierz[1,2] = val.
Ad. 2 - W takim przypadku potrzebujesz przechować zaledwie n*(n+1)/2 wpisów. Taki kod wygląda tak: macierz[min(i, j), max(i, j)] = val

0

a bez uzywania numpy ?

0

mam coś takiego:

n = int(raw_input("Podaj liczbe wierzcholkow: "))
t = [0 for i in range(n * n)]

for i in range(n):
    for j in range(int(n)):
        t[n * i + j] = int(raw_input("A[%i,%i] = " % (i + 1, j + 1)))


print "\nWczytana macierz:"

for i in range(n):
    for j in range(n):
        print "A[%i,%i] = %i\t" % (i + 1, j + 1, t[n * i + j]),
   print "\n"

co musze dodać żeby to smigało tak jak chce?

0

Kod masz w porządku, tzn. ja bym to poprawił dodając metodę typu:

def idx(i, j, n):
    return i * n + j

Używasz jej zawsze przy dostępie do elementów tablicy. Jak teraz w idx(i, j, n) dodasz modyfikację z min/max, to masz macierz symetryczną o rozmiarze co najwyżej n * (n + 1) / 2.

0

Zadanie na Uniwerku Gdańskim?

0

ok wprowadziłem zmiany,
teraz kod wyglada tak:

n = int(raw_input("Podaj wymiar macierzy: ") )
t = [ 0 for i in range(n * (n+1)/2) ]
def idx(i,j,n):
         idx[min(i, j), max(i, j)] = val
         return i * n+j
 
for i in range(n):
        for j in range( int(n) ):
                t[ n * i + j ] = int(raw_input("A[%i,%i] = " % (i + 1, j + 1) ) )
 
print "\nWczytana macierz:"
 
for i in range(n):
        for j in range(n):
                print "A[%i,%i] = %i\t" % (i + 1, j + 1, t[ n * i + j ]),
               
 
        print "\n",

ale wywala błąd:
Podaj wymiar macierzy: 3
A[1,1] = 0
A[1,2] = 1
A[1,3] = 1
A[2,1] = 1
A[2,2] = 0
A[2,3] = 1
A[3,1] = 1
Traceback (most recent call last):
File "c:/Users/xxx/Desktop/aaa.py", line 9, in <module>
t[ n * i + j ] = int(raw_input("A[%i,%i] = " % (i + 1, j + 1) ) )
IndexError: list assignment index out of range

co zepsulem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1