图的广度遍历(BFS)

来源:互联网 发布:matlab mac安装教程 编辑:程序博客网 时间:2024/06/11 16:48
#include<iostream>#define Max_FIFO 50using 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);}

原创粉丝点击