NetworkX. Проблема с узлами и ребрами

Я новичок в Python и у меня проблемы с графиком networkx Вот фрагмент кода, который представляет собой массив пикселей [x, y]. Мне нужно найти кратчайший путь от начальной точки - (0, 0) до моей цели - (100, 100).

Я пробовал сделать это двумя разными способами.

  • 1-й способ со списком. Это нормально, но занимает слишком много времени.
  • 2-й способ (networkx) соединил каждый узел с другим. Итак, когда я делаю print(nx.bidirectional_shortest_path(D,(0, 0),(100, 100))) его результат был (0, 0) , (100, 100) вместо (0, 0), (1, 0), (2, 0)...(100, 99), (100, 100).

Можно ли соединить каждый узел из массива (x, y) с помощью dif.step(x +-1, y) и (x, y +-1). Скриншот сделан с медленным списком результатов.

Результат

Код:

import time
import numpy as np
from mss import mss
import pyautogui as pg
import win32gui, win32ui, win32con, win32api
import networkx as nx
from networkx import edge_dfs
import copy
import cv2

result = find_color(our_color, monitor) #array of pixels
[[  0   0]
 [  0   1]
 [  0   2]
 ...
 [133 159]
 [133 160]
 [133 161]]
 b = copy.deepcopy(result)
 new_list = []
     for i in range(len(result)): 
        if [result[i][0]+1,result[i][1]] in b :
            #D.add_edge(((result[i][0],result[i][1])), ((result[i][0]+1,result[i][1])))
            #new_list.append((((result[i][0],result[i][1])), ((result[i][0]+1,result[i][1])))) 

        if [result[i][0]-1,result[i][1]] in b :
            #D.add_edge(((result[i][0],result[i][1])), ((result[i][0]-1,result[i][1])))
            #noviilist.append((((result[i][0],result[i][1])), ((result[i][0]-1,result[i][1]))))

        if [result[i][0],result[i][1]+1] in b :
            #D.add_edge(((result[i][0],result[i][1])), ((result[i][0],result[i][1]+1)))
            #noviilist.append((((result[i][0],result[i][1])), ((result[i][0],result[i][1]+1))))

        if [result[i][0],result[i][1]-1] in b :
            #D.add_edge(((result[i][0],result[i][1])), ((result[i][0],result[i][1]-1)))
            #noviilist.append((((result[i][0],result[i][1])), ((result[i][0],result[i][1]-1))))
             
        #b.remove(result[i])  # for list
  D = nx.to_networkx_graph(new_list, create_using=nx.Graph)
  print(nx.bidirectional_shortest_path(D,(0, 0),(100, 100)))
    

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