图的广度遍历(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);}