任何人都可以幫助我在我的圖上實現bfs嗎?我把我的圖形實現和bfs算法放到我的圖中。我只需要一些想法如何去做。java中的導向圖
public class DiGraph<V> {
public static class Edge<V>{
private V vertex;
private int cost;
public Edge(V v, int c){
vertex = v;
cost = c;
}
@Override
public String toString() {
return "{" + vertex + ", " + cost + "}";
}
}
private Map<V, List<Edge<V>>> inNeighbors = new HashMap<V, List<Edge<V>>>();
private Map<V, List<Edge<V>>> outNeighbors = new HashMap<V, List<Edge<V>>>();
public int nr_vertices;
public int nr_edges;
public String toString() {
StringBuffer s = new StringBuffer();
for (V v: inNeighbors.keySet())
s.append("\n " + v + " -> " + inNeighbors.get(v));
return s.toString();
}
public void addIn (V vertex) {
if (inNeighbors.containsKey(vertex))
return;
inNeighbors.put(vertex, new ArrayList<Edge<V>>());
}
public void addOut(V vertex) {
if (outNeighbors.containsKey(vertex))
return;
outNeighbors.put(vertex, new ArrayList<Edge<V>>());
}
public boolean contains (V vertex) {
return inNeighbors.containsKey(vertex);
}
public void add (V from, V to, int cost) {
this.addIn(from);
this.addIn(to);
this.addOut(to);
this.addOut(from);
inNeighbors.get(from).add(new Edge<V>(to,cost));
outNeighbors.get(to).add(new Edge<V>(from,cost));
}
public int outDegree (V vertex) {
return inNeighbors.get(vertex).size();
}
public int inDegree (V vertex) {
return inboundNeighbors(vertex).size();
}
}
public void bfs()
{
// BFS uses Queue data structure
Queue queue = new LinkedList();
queue.add(this.rootNode);
printNode(this.rootNode);
rootNode.visited = true;
while(!queue.isEmpty()) {
Node node = (Node)queue.remove();
Node child=null;
while((child=getUnvisitedChildNode(node))!=null) {
child.visited=true;
printNode(child);
queue.add(child);
}
}
// Clear visited property of nodes
clearNodes();
}
的BFS算法我把它從互聯網上,我理解它,但它是爲一般情況下,我不知道如何使它適應我的圖表
「有些不起作用」究竟意味着什麼? – home
isEdge()總是返回YES。並且inboundNeighbors()返回隨機nr。我無法弄清楚。 – jojuk
通過調試一次修復一個錯誤。如果有這麼多,重新思考/重讀/重寫也是一個好主意。這就像你會用英文文件,但更具體地分爲語法和語義。編譯器和運行時輸出通常非常具體,併爲您提供線路編號。 – clwhisk