判断图连通性的三种方法

       在看哥尼斯堡七桥问题的时候,谈到欧拉回路的问题,不免又想到了图的连通性。想到以后说不定会遇到相关问题,就做下连通性判断算法总结实现。如果一个图是连通的,那么从一个节点开始访问,采用深度优先或者广度优先对它进行遍历,那么必定能够访问完所有的节点。还有一种方法,就是使用图的邻接矩阵的传递闭包。下面是三种方法的实现代码。

#include
#include
#include 

using namespace std;

#define MAX_VNUM 10

typedef struct
{
 int weight;
}Adj,AdjMatrix[MAX_VNUM][MAX_VNUM];

typedef struct
{
 AdjMatrix adjM;
 int vNum;
}adjGraph;

//创建一个图,节点从0开始,注意传入引用
void CreateGraph(adjGraph &G)
{
 cout<<"输入节点个数:"<>G.vNum;
 cout<<"输入图的邻接矩阵:"<>G.adjM[i][j].weight;
  }
 }
}

//输出一个图
void print(adjGraph G)
{
 for(int i=0;i q; //明白队列用途?
 bool visit[MAX_VNUM]; //访问数组
 int count = 0;

 memset(visit,0,sizeof(visit));

 q.push(0); //0节点入队列

 while(!q.empty())
 {
  int v = q.front();
  visit[v] = true;
  q.pop();
  count++;

  //与联通且没有被访问过节点入队列
  for (int i =0;i


你可能感兴趣的:(图)