谁能帮我在我的图表上实现 bfs?我把我的图实现放在这里,把 bfs 算法放到我的图上。我只需要一些想法如何去做。
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算法,我理解它,但它适用于一般情况,我不知道如何使其适应我的图表