#include<iostream>
#include<queue>
using namespace std;
const int MaxLen = 20; //设定图最多包含20个顶点
class Map{
private:
bool Visit[MaxLen]; //访问标志数组,标识每个顶点是否已访问
int Matrix[MaxLen][MaxLen];//图的邻接矩阵
int Vexnum; //图的顶点数量
void BFS(int v);
public:
void SetMatrix(int vnum,int **mx);
void BFSTraverse();
};
//设置邻接矩阵
void Map::SetMatrix(int vnum,int **mx){
int i,j;
Vexnum = vnum;
for(i=0; i<vnum; i++)
for(j=0; j<vnum; j++)
Matrix[i][j] = mx[i][j];
}
void Map::BFS(int v){
int w, u;
int i, k;
queue<int> Q;
for(i=0; i<Vexnum; i++)
Visit[i] = false;
for(v=0; v<Vexnum; v++){
if(!Visit[v]){
Visit[v]=true;
cout << v << " ";
Q.push(v);
while(!Q.empty()){
u = Q.front();
Q.pop();
for(i=0; i<Vexnum; i++)
if(Matrix[u][i]==1 && Visit[i]==false){
Visit[i] = true;
cout<<i<<" ";
Q.push(i);
}
}
}
}
cout<<endl;
}
void Map::BFSTraverse(){
BFS(0);
}
网友评论