список ребер питона к матрице смежности

Чтобы улучшить читаемость, вы можете использовать несколько переменных, например

Foo theFoo;
Bar theBar;
Baz theBaz;

theFoo = wsObject.getFoo();

if ( theFoo == null ) {
  // Exit.
}

theBar = theFoo.getBar();

if ( theBar == null ) {
  // Exit.
}

theBaz = theBar.getBaz();

if ( theBaz == null ) {
  // Exit.
}

return theBaz.getInt();
0
задан dacoda007 30 March 2019 в 22:35
поделиться

2 ответа

Как следует из комментария, вы проверяете ребра только для того количества строк, которое имеется в вашей матрице смежности, поэтому в общем случае вы не можете достичь многих ребер. Вместо этого рассмотрим следующее:

E = [[0, 0], [0, 1], [1, 0], [1, 1]]

# nodes must be numbers in a sequential range starting at 0 - so this is the
# number of nodes. you can assert this is the case as well if desired 
size = len(set([n for e in E for n in e])) 
# make an empty adjacency list  
adjacency = [[0]*size for _ in range(size)]
# populate the list for each edge
for sink, source in E:
    adjacency[sink][source] = 1

>>> print(adjacency)
>>> [[1, 1], [1, 1]]

Если вы хотите быть краткими за счет ясности:

adjacency = [[1 if [i, j] in set(map(tuple, E)) else 0 for j in range(size)] for i in range(size)]

size, представляющих количество узлов - как и раньше.

0
ответ дан modesitt 30 March 2019 в 22:35
поделиться

Я ниже blv чище и делает свою работу

    E= [[0, 0], [0, 1], [1, 0], [1, 1]]
    size = max(max(E))+1
    r = [[0 for i in range(size)] for j in range(size)]
    for row,col in E:
        r[row][col] = 1
    print(r)    
0
ответ дан kcp 30 March 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: