圖的連通性判斷
阿新 • • 發佈:2019-02-19
判斷圖的連通性,程式目的是為了檢驗一個網路是否為聯通的,如果不連通,會將小的區塊的節點號報出。
#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;
}
}