代码:
#include <iostream>
#include<queue>
using namespace std;
/******************
*@Author:邱于涵
* @Description:广度优先搜索 广度优先遍历
*@Time:2016年10月16日11:33:24
* @注意 这个程序可能在算法上有些逻辑问题,本人没有仔细验证。
*****************************/
int main()
{
//|邻接矩阵
int vertex[8][8] = {
{ 0, 1, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 1, 0, 0, 1, 0 },
{ 0, 0, 1, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0, 0, 1 },
{ 0, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 1, 0, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0 },
};
//|队列
queue<int> * pqueue=new queue<int>;
//染色数组 记录访问过的顶点
int color[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
//第一个顶点压入队列
pqueue->push(0);
//循环的条件为队列不为空
while(pqueue->empty()==false)
{
//|取队列头
int vertexFront=pqueue->front();
//|循环遍历这个顶点所连接的所有点
for(int i=0;i<8;i++)
{
//|如果有链接,且没有走过 就输出这个点,并且把它放入队列
if(vertex[vertexFront][i] == 1 && color[i]==0)
{
cout<<i<<",";
color[i]=1;
pqueue->push(i);
}
}
//|把刚才遍历的点 弹出
pqueue->pop();
}
cout << "BFS-End" << endl;
return 0;
}