判断图的连通性,程序目的是为了检验一个网络是否为联通的,如果不连通,会将小的区块的节点号报出。
#include <iostream>
#include <cstdio>
#include <vector>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
const int maxn = 1000 + 5;
int n,m;
int my_index;
vector<int >G[maxn];//图的存储形式
bool vis[maxn];//节点的访问状态
void dfs(int u){//深度遍历算法
my_index++;
vis[u] = true;
for(int i = 0;i < G[u].size(); i++){
int v = G[u][i];
if(!vis[v])dfs(v);
}
}
int main(){
n=951;//节点数
my_index=0;
float n1[2000];
float n2[2000];
float n3[2000];
float n4[2000];
float n5[2000];
float n6[2000];
ifstream inFile;
int count;
inFile.open("1.txt");
for(count=0;count<2000;count++)//读数据
{
inFile>>n1[count]>>n2[count]>>n3[count]>>n4[count]>>n5[count]>>n6[count];
if(inFile.eof()){
break;
}
}
inFile.close();
for(int i = 1;i <= count+1; i++){
int a,b;
a=n2[i-1];//读入数据的第二列和第三列分别为支路的起点和终点
b=n3[i-1];
G[a].push_back(b);
G[b].push_back(a);
}
for(int i = 1;i <= n; i++){
dfs(i);
for(int j = 1;j <= n; j++){
vis[j]=false;
}
if(my_index!=928)cout<<i<<my_index<<endl;
if(n == my_index)printf("Yes\n");
else printf("No\n");
my_index=0;
}
}