1. 程式人生 > >圖的連通性判斷

圖的連通性判斷

判斷圖的連通性,程式目的是為了檢驗一個網路是否為聯通的,如果不連通,會將小的區塊的節點號報出。

#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!=928cout<<i<<my_index<<endl; if(n == my_index)printf("Yes\n"); else printf("No\n"); my_index=0; } }