#include<iostream>
#define Max_FIFO 50
using namespace std;
typedef int **Graph;
int *visted;
int a[Max_FIFO];//使用数组作为队列
void InitGraph(Graph &G,int n)
{
int i;
int j;
visted=new int[n];
G=new int *[n];
for(i=0;i<n;++i)
G[i]=new int [n];
for(i=0;i<n;++i)
for(j=0;j<n;++j)
G[i][j]=0;
for(i=0;i<n;++i)
visted[i]=0;
for(i=0;i<Max_FIFO;++i)
a[i]=0;
}
void CreateGraph(Graph &G,int n,int edge)
{
int i,j;
int k;
for(k=0;k<edge;++k)//输入边数
{
cin>>i>>j;
// if(i>=n ||j>=n ||i<0||j<0)return ;
G[i][j]=G[j][i]=1;
}
}
void BFS(Graph &G,int n,int i)
{
int f;
int r;
int j;
f=r=0;
cout<<"==>>"<<i;//输出顶点
visted[i]=1;
for(j=0;j<n;++j)//将与顶点直接相连的顶点入栈
{
if(!visted[j]&&G[i][j]!=0)
{
visted[j]=1;
a[r]=j;
r=r+1;
}
}
//r=r-1;//在上的for语句中
while(a[f])//注意判断逻辑语句,f<r;
{
int k=a[f];
cout<<"==>>"<<k;
for(j=0;j<n;++j)
{
if(!visted[j]&&G[k][j]!=0)
{
visted[j]=1;
a[r]=j;
r=r+1;
}
}
f=f+1;
}
}
int main()
{
Graph G;
InitGraph(G,6);
CreateGraph(G,6,8);
BFS(G,6,0);
}
图的广度遍历(BFS)
原文作者:数据结构之图
原文地址: https://blog.csdn.net/yong2016/article/details/9204219
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/yong2016/article/details/9204219
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。