我正在爲一個項目編寫算法(我確定在我的代碼中有其他地方有錯誤,但不幫我,因爲我將在以後處理這些錯誤)。但我遇到了基本的Python組織錯誤。基本上我使用一個庫(networkX),並有一個功能完整的圖(我已經測試了它,節點和邊)。我遇到了如何設置我的參數,然後實際執行ham_main()函數的錯誤。在另一個函數(Python)中調用函數時沒有被定義
def ham_walk(self, graph, path):
if len(path) == len(graph.nodes()):
return True
for neighbor in graph.neighbors(path.pop()):
if neighbor not in path:
ham_walk(graph, path.append(neighbor))
return False
def ham_main(self):
graph = self.getGraph()
print(graph.nodes())
print(graph.edges())
path = []
for node in graph.nodes():
path = [node]
if ham_walk(self, graph, path):
return print("Hamiltonian Path: " + path)
else:
print("False")
return False
return print("Hamiltonian Path: " + path)
class Main:
execute = HamParser()
execute.ham_main()
當我嘗試在我的主類中執行時,出現以下錯誤;
File "C:/Users/Chris/Dropbox/HamProgram.py", line 33, in ham_main
if ham_walk(self, graph, path):
NameError: name 'ham_walk' is not defined
看起來好像ham_walk沒有註冊。我錯過了一些至關重要的東西嗎
編輯:全碼
from sys import argv
import networkx as nx
class HamParser:
def getGraph(self):
adjLines = []
test = "input001.txt"
with open(test, 'r') as adjFile:
#with open(sys.argv[1], 'r') as adjFile:
adjFile.readline()
for line in adjFile:
adjLines.append(line.strip())
G = nx.parse_adjlist(adjLines, nodetype=int)
return G
def ham_walk(self, graph, path):
if len(path) == len(graph.nodes()):
return True
for neighbor in graph.neighbors(path.pop()):
if neighbor not in path:
ham_walk(graph, path.append(neighbor))
return False
def ham_main(self):
graph = self.getGraph()
print(graph.nodes())
print(graph.edges())
path = []
for node in graph.nodes():
path = [node]
if ham_walk(self, graph, path):
return print("Hamiltonian Path: " + path)
else:
print("False")
return False
return print("Hamiltonian Path: " + path)
class Main:
execute = HamParser()
execute.ham_main()
顯示完整的代碼?? – babygame0ver
什麼是Main類? – MxyL
將'ham_walk(self,graph,path)'改爲'self.ham_walk(圖形,路徑)' – eyllanesc