BFS:
通过维护一个queue,完成图的遍历。
首先入队一个顶点v,
然后循环操作:
把v顶点的邻接点放入queue中
出队时访问,把v设为出队的顶点。
源码:
#include <iostream>
#include <queue>
#include <cstdlib>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*
注意 遇到不连通的图 (类似森林的图) 要加一个BFStravel函数 因为会遍历不到另一个连通块
从这个函数开始 而不是BFS函数
void BFSTravel()
{
for(所有顶点)
if(!vis)
BFS()
}
*/
int map[5][5]={
{0,1,0,1,0},
{1,0,1,0,1},
{0,1,0,0,0},
{1,0,0,0,0},
{0,1,0,0,0}
};
bool bmap[5];
queue<int> q;
int count=0;
int foot[5];
void bfs(){
while(!q.empty()){
int key=q.front();
q.pop();
for(int i=0;i<5;i++){
if(bmap[i]==false && map[key][i]==1){
cout<<i+1<<endl;
bmap[i]=true;
foot[count++]=i;
q.push(i);
if(count==5){
exit(0);
}
}
}
}
}
int main(int argc, char *argv[]) {
int key=4; //数组从0开始 4实际是5
bmap[key]=true;
foot[count++]=key;
q.push(key);
bfs();
for(int i=0;i<5;i++){
cout<<foot[i]<<"-";
}
cout<<endl;
return 0;
}


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



