每个顶点进队列一次,每条边处理一次,O(V+E)
public class BFS {
public static void bfs(Graph g, Vertex v) {
assert (true);
Queue<Vertex> q = new LinkedList<Vertex>();
q.add(v);
v.color = Vertex.BLACK;
q.add(new Vertex(-1));
int flag = 0;
Vertex c = null;
while (!q.isEmpty()) {
c = q.poll();
if (c.id == -1) {
System.out.println();
if (flag == 0) {
q.add(new Vertex(-1));
flag++;
continue;
} else {
break;
}
} else {
System.out.print(c.id + " ");
flag = 0;
}
// c.color = Vertex.BLACK;
for(int i=0; i<g.count_vertex; i++){
if(g.vertexs[i].color == Vertex.WHITE
&& g.adjMatrix[c.id][i] > 0){
q.add(g.vertexs[i]);
g.vertexs[i].color = Vertex.BLACK;
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
Graph g = Graph.createNoDirectedGraph(8, "dfs.txt");
// Graph g = Graph.createDirectedGraph(8, "dfs.txt");
g.printGraph();
BFS.bfs(g, g.vertexs[0]);
}
}
775

被折叠的 条评论
为什么被折叠?



