广度算法源程序

#include <iostream>
#include <queue>

using namespace std;

#define MaxVnum 50
typedef double A_Matrix[MaxVnum][MaxVnum];
typedef struct{
int vexnum,arcnum;
A_Matrix arcs;
}Graph;

int v = 0;

//为了方便,我们直接手动实现地图矩阵的加载

void CreateGraph(Graph &G)
{
G.vexnum=8;
G.arcnum=9;
G.arcs[0][1]=1;
G.arcs[0][2]=1;
G.arcs[1][3]=1;
G.arcs[1][4]=1;
G.arcs[2][5]=1;
G.arcs[2][6]=1;
G.arcs[3][1]=1;
G.arcs[3][7]=1;
G.arcs[3][6]=1;
G.arcs[4][1]=1;
G.arcs[4][7]=1;
G.arcs[5][2]=1;
G.arcs[5][6]=1;
G.arcs[5][5]=1;
G.arcs[6][2]=1;
G.arcs[6][5]=1;
G.arcs[7][3]=1;
G.arcs[7][4]=1;
}

bool tag[MaxVnum]; //标记一个点是不是已经被访问过了

void BFSTraverse(Graph G)
{
for(v = 0;v < G.vexnum;v++) //现将其所有顶点都设为未访问状态
tag[v] == false;
queue<int> Q;
for(v = 0;v < G.vexnum;v++)
{
if(tag[v] == false){
Q.push(v);
tag[v] = true;
while(!Q.empty()){
int tmp = Q.front();
Q.pop();
cout << tmp + 1 << endl;
for(int j = 0;tag[j] == false && G.arcs[v][j] == 1;j++){
Q.push(j);
tag[j] = true;
}
}
}
}
}

int main()
{
Graph G;
CreateGraph(G);
BFSTraverse(G);
return 0;
}

 

posted @ 2018-03-03 21:23  陈焕彪  阅读(106)  评论(0编辑  收藏  举报