判斷無向圖是不是連通的c++程式碼
// #include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
bool isconnected(vector<vector<int>>);
void DFS(vector<vector<int>>,int );
vector<bool> visited; int _tmain(int argc, _TCHAR* argv[])
{
int Vnumber = 6 //圖的頂點個數
vector<vector<int>> G(Vnumber);
for(int i=0;i<G.size();i++) //輸入圖的連線關係
//從0開始直到最後一個 ,圖用鄰接表的形式儲存
{
while(true) //輸入你要判斷的圖 輸完一個頂點 輸入1000,
{ //然後開始下一個頂點的鄰居輸入
int n;
cin>>n;
if(n==1000)
{
cout<<"next"<<endl;
break;
}
G[i].push_back(n);
}
} bool flag = isconnected(G);
if(flag ==true)
cout<<"connected"<<endl; return 0;
}
bool isconnected(vector<vector<int>> G)
{ for(int i=0;i<G.size();i++)
{
visited.push_back(false); }
int v = 0; // 從0開始搜尋,如果能遍訪所有頂點 則說明連通
DFS(G,v);
bool flag = true;
for(int i=0;i<visited.size();i++)
{
if(visited[i] == false)
flag = false;
}
return flag;
}
void DFS(vector<vector<int>> G, int v)
{ visited[v] = true;
int m = G[v].size();
int n = 0;
for(int w = G[v][0];n<m;w = G[v][n])
{
n = n+1;
if(visited[w] == false)
DFS(G,w);
if(n==m)
break;
} }