#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;
#define MaxNum 10 //最大顶点数
typedef struct MGraph
{
char Vertex[MaxNum]; // 储存图的顶点
int Edge[MaxNum][MaxNum]; //顶点的关系矩阵 1表示相连接,0表示无连接
int n,e;
} MGraph;
int visited[MaxNum];
//定位顶点Vex的下标位置
int Locate_vex(MGraph* G,char vex)
{
for(int i=0;i<G->n;++i)
if(G->Vertex[i]==vex)
return i;
}
//创建图
void CreateGraph(MGraph * G)
{
int vex1,vex2;
int i,j,k;
printf("\n请输入有向图的顶点名称:");
for(i=0;i<G->n;++i)
scanf("\n%c",&G->Vertex[i]);
// 初始化关系矩阵为 0
for(i=0;i<G->n;++i)
for(j=0;j<G->n;++j)
G->Edge[i][j]=0;
printf("\n请输入有向图中每条弧的弧尾顶点和弧头顶点名称:\n");
//建立关系矩阵 如果有弧连接则设为 1
for(k=1;k<=G->e;++k)
{
printf("\n请输入第 %d 条弧的弧尾顶点名称:",k);
scanf("\n%c",&vex1);
printf("请输入第 %d 条弧的弧头顶点名称:",k);
scanf("\n%c",&vex2);
i=Locate_vex(G,vex1);
j=Locate_vex(G,vex2);
if(G->Edge[i][j])
{
printf("\n请不要输入重复的弧: < %c,%c > \n",G->Vertex[i],G->Vertex[j]);
printf("\n程序已停止运行...\n");
exit(1);
}
else
{
G->Edge[i][j]=1;
}
}
}
//打印图的信息
void PrintGraph(const MGraph * G)
{
int i,j;
printf("\n\n有向图有 %d 个顶点:",G->n);
for(i=0;i<G->n;++i)
printf(" %c ",G->Vertex[i]);
printf("\n\n有向图有 %d 条弧:",G->e);
for(i=0;i<G->n;++i)
for(j=0;j<G->n;++j)
if(G->Edge[i][j]==1)
printf(" < %c,%c > ",G->Vertex[i],G->Vertex[j]);
printf("\n");
}
//广度优先遍历
void BFS(MGraph* G)
{
queue<int> que;
for(int i=0;i< G->n;++i)
visited[i]=0;
for(int i=0;i< G->n;++i)
{
if(!visited[i])
{
printf("%c ",G->Vertex[i]);
visited[i]=1;
que.push(i);
}
while(!que.empty())
{
int k=que.front();
que.pop();
for(int j=0;j< G->n;++j)
{
if(G->Edge[k][j]==1 && !visited[j])
{
printf("%c ",G->Vertex[j]);
visited[j]=1;
que.push(j);
}
}
}
}
}
//测试代码
int main()
{
MGraph G;
printf("\n有向图的邻接矩阵结构存储.....");
printf("\n\n请输入有向图的顶点数:");
scanf("%d",&G.n);
printf("\n请输入有向图有多少条弧:");
scanf("%d",&G.e);
CreateGraph(&G);
PrintGraph(&G);
printf("广度优先遍历:\n");
BFS(&G);
printf("\n");
return 0;
}
有向图的广度优先遍历
原文作者:数据结构之图
原文地址: https://blog.csdn.net/qq1120815657/article/details/45176015
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq1120815657/article/details/45176015
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。