我正在使用深度優先搜索和圖形來查找是否存在2個節點之間的路由。 但由於某種原因,即使有路徑,我的方法總是會導致錯誤。查找是否存在2個節點之間的路由深度優先搜索
這裏是我的搜索代碼:
static boolean search(Graph g, Node start, Node end)
{
if(start == null || end == null) return false;
start.state = State.Visited;
for(Node u: start.getChildNodes())
{
if(u.state != State.Visited)
{
if(u.equals(end))
{
return true;
}
else
{
u.state = State.Visited;
search(g,u,end);
}
}
}
return false;
}
我打電話這樣的方法:)
public static void main(String[] args) {
Graph gDfs = createNewGraph();
System.out.println("path between A & B");
System.out.println(search(gDfs,gDfs.getNode()[0],gDfs.getNode()[1]));
}
createNewGraph(
public static Graph createNewGraph()
{
Graph g = new Graph();
Node[] temp = new Node[8];
temp[0] = new Node("A", 3);
temp[1] = new Node("B", 3);
temp[2] = new Node("C", 1);
temp[3] = new Node("D", 1);
temp[4] = new Node("E", 1);
temp[5] = new Node("F", 1);
temp[0].addChildNode(temp[1]);
temp[0].addChildNode(temp[2]);
temp[0].addChildNode(temp[3]);
temp[1].addChildNode(temp[0]);
temp[1].addChildNode(temp[4]);
temp[1].addChildNode(temp[5]);
temp[2].addChildNode(temp[0]);
temp[3].addChildNode(temp[0]);
temp[4].addChildNode(temp[1]);
temp[5].addChildNode(temp[1]);
for (int i = 0; i < 7; i++)
{
g.addNode(temp[i]);
}
return g;
}
@amit =>這是你的建議嗎?
for(Node u: start.getChildNodes())
{
if(u.state != State.Visited)
{
if (search(g,u,end)) return true;
}
}
見Amit的答案。另外,確保Node.equals()正確實現,否則當路由存在時你也可能會錯誤。 –