我正在嘗試發現從一個起始節點可到達的所有節點。爲什麼堆棧炸燬
似乎基本案例從未達成,我不知道爲什麼。
我的代碼:
class Vertex {
public final String name;
public int found;
public Edge[] adjacencies;
public Vertex(String argName) { name = argName; found = 0;}
}
class Edge {
public final Vertex target;
public Edge(Vertex argTarget, double argWeight) { target = argTarget; weight = argWeight; }
}
ArrayList<Vertex> merge(ArrayList<Vertex> a, ArrayList<Vertex> b) {
if(a == null) return b;
if(b == null) return a;
for(int x = 0; x < a.size(); x++)
b.add(a.get(x));
return b;
}
ArrayList<Vertex> span(Vertex b) {
System.out.println("hello");
if(b.found == 1) {
return null;
}
ArrayList<Vertex> t = new ArrayList<Vertex>();
t.add(b);
b.found = 0;
if(b.adjacencies == null) return t;
for(int x = 0; x < b.adjacencies.length; x++) {
ArrayList<Vertex> result = span(b.adjacencies[x].target);
t = merge(t, result);
}
return t;
}
我得到一個堆棧溢出錯誤,現在看來似乎是停留在遞歸,但我不知道爲什麼。
注意:這是我正在運行它的圖形。
Vertex v0 = new Vertex("Redvile");
Vertex v1 = new Vertex("Blueville");
Vertex v2 = new Vertex("Greenville");
Vertex v3 = new Vertex("Orangeville");
Vertex v4 = new Vertex("Purpleville");
v0.adjacencies = new Edge[]{ new Edge(v1, 5), new Edge(v2, 10), new Edge(v3, 8) };
v1.adjacencies = new Edge[]{ new Edge(v0, 5), new Edge(v2, 3), new Edge(v4, 7) };
v2.adjacencies = new Edge[]{ new Edge(v0, 10), new Edge(v1, 3) };
v3.adjacencies = new Edge[]{ new Edge(v0, 8), new Edge(v4, 2) };
v4.adjacencies = new Edge[]{ new Edge(v1, 7), new Edge(v3, 2) };
運行。 – djechlin
@djechlin我完全同意。 –
它在合併操作上卡住了嗎?圖創建應該沒問題。 – djjeck