图的广度遍历(BFS)

#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);
}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/yong2016/article/details/9204219
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞