广度优先搜索就是一个点,把他所有的连接的点都走一遍,然后再从他所连接的点再递归出去
之前写那个深搜的时候写了一个递归和一个循环,但大体思路都差不多,这个也是,所以就写一个循环吧,好理解一点
伪代码:
int flag = 0; // 这个就是标记量,标记有多少个已经走过了,如果这个flag == 总共的点数,那么就代表程序输出结束了
对象 point //每个点是一个对象,属性有连接的点的数组,一个int a变量标记是否已经走过, 0代表没走过,1代表走过
while(true)
{
if(flag == 总共的点)
{
break;
}
if(p.a == 0)
{
System.out.print(p);
flag++;
if(连接点的数组的指针没指向最后)
{
p.a = 这个连接的点;
指针++;
}
else
{
连接的数组变为之前的数组连接点的数组
p.a = 这个连接点;
}
}
else
{
p.a = 上一个点
}
}
void BFS (Graph G, int v){
//按广度优先非递归遍历连通图G
cout<<v; visited[v] = true; //访问第v个顶点
InitQueue(Q); //辅助队列Q初始化,置空
EnQueue(Q, v); //v进队
while(!QueueEmpty(Q)){ //队列非空
DeQueue(Q, u); //队头元素出队并置为u
for(w = FirstAdjVex(G, u); w>=0; w = NextAdjVex(G, u, w))
if(!visited[w]){ //w为u的尚未访问的邻接顶点
cout<<w;visited[w] = true; EnQueue(Q, w); //w进队
}//if
}//while
}//BFS