利用BFS求图的连通分量

来源:互联网 发布:28岁未成年网络剧免费 编辑:程序博客网 时间:2024/05/19 18:43

该算法适用于无向图和有向图(包括自环图)函数接口说明如下:

 

/*输入参数:图顶点个数,编号为0---n-1返回值:连通分量个数*/int connections_bfs(int n);/*bfs遍历图输入参数:v顶点编号,n顶点个数,编号规则同上*/void bfs(int v,int n);#define N 1000bool *visited;//全局标记量,表示顶点是否已经访问过bool maxtri[N][N];//图的邻接表//函数代码:int connections_bfs(int n){   visited=new bool [n];   int count=0;   memset(visited,false,sizeof(bool)*n);   for(int i=0;i!=n;++i)   {       if(!visited[i])       {           bfs(i,n);           count++;       }   }   delete [] visited;   return count;}void bfs(int v,int n){   int u;   queue<int>  q;//C++STL队列   visited[v]=true;     q.push(v);     while(!q.empty())     {         u=q.front();         q.pop();         for(int i=0;i!=n;++i)         {           if(maxtri[u][i])           {               if(!visited[i])               {                   q.push(i);                   visited[i]=true;               }           }         }     }}


 

原创粉丝点击