Преобразование списка списков в граф

Есть вот такой список (условно 3 на 3, но будет лучше если можно будет увеличить его)

simple_example = [
    [3, 0, 4],
    [5, 7, 1],
    [2, 6, 8]
]

Нужна функция, которая сможет преобразовать такой список в граф следующего видавведите сюда описание изображения

Запись такого графа должна выглядеть вот так

graph = {
    3:[{'node':5, 'price':1}, {'node':0, 'price':1}],
    0:[{'node':3, 'price':1}, {'node':7, 'price':1}, {'node':4, 'price':1}],
    4:[{'node':0, 'price':1}, {'node':1, 'price':1}],
    5:[{'node':3, 'price':1}, {'node':7, 'price':1}, {'node':2, 'price':1}],
    # и т.д
}

Функция должна принимать в качестве аргумента нужный нам список списков, а на выходе выдавать граф.

Я попытался найти какие-нибудь закономерности, наложил граф на систему координат, где ось ординат была перевернута (что бы совпадала с индексированием в Python). Вроде что-то есть, но много условностей.


Ответы (1 шт):

Автор решения: passant

Решение в точном соответствии с тем, что вы написали. Если же у вас условие предполагало нечто другое, то, надеюсь, легкую модификацию задачи вам будет сделать самостоятельно не сложно:

simple_example = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
simp=np.array(simple_example)
n=simp.shape[0]
graph = {}
def pruff_neighbors(simp,i,j):
    neighbors=[(i-1,j),(i,j-1),(i,j+1),(i+1,j)]
    nodes=[]
    for nb in neighbors:
        if (nb[0]>=0 and nb[1]>=0 and nb[0]<n and nb[1]<n):
            nodes.append(simp[nb[0],nb[1]])
    return nodes
for i in range (n):
       for j in range(n):
           print('j',j)
           nodes=pruff_neighbors(simp,i,j)
           graph[simp[i,j]]=[{'node':nb,'price':1} for nb in nodes]
print (graph)

Результат:

{1: [{'node': 2, 'price': 1}, {'node': 4, 'price': 1}], 
 2: [{'node': 1, 'price': 1}, {'node': 3, 'price': 1}, {'node': 5, 'price': 1}], 
 3: [{'node': 2, 'price': 1}, {'node': 6, 'price': 1}], 
 4: [{'node': 1, 'price': 1}, {'node': 5, 'price': 1}, {'node': 7, 'price': 1}], 
 5: [{'node': 2, 'price': 1}, {'node': 4, 'price': 1}, {'node': 6, 'price': 1}{'node': 8, 'price': 1}], 
 6: [{'node': 3, 'price': 1}, {'node': 5, 'price': 1}, {'node': 9, 'price': 1}], 
 7: [{'node': 4, 'price': 1}, {'node': 8, 'price': 1}], 
 8: [{'node': 5, 'price': 1}, {'node': 7, 'price': 1}, {'node': 9, 'price': 1}], 
 9: [{'node': 6, 'price': 1}, {'node': 8, 'price': 1}]}
→ Ссылка