1. 程式人生 > >判斷無向圖是不是連通的c++程式碼

判斷無向圖是不是連通的c++程式碼

// DFS.cpp : 定義控制檯應用程式的入口點。
// #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;
 
 } }

相關推薦

通過DFS和BFS判斷是否連通

基礎定義 無向圖:沒有方向的圖 連通圖:任意兩個頂點可以直接或者通過其他頂點走通,那麼就是連通圖,和完全圖需要區別(完全圖是需要任意兩個頂點直接有路) 遍歷圖的基本方法來判斷是否連通 DFS和BFS有的步驟都是從一個頂點開始,然後判斷該頂點是否被訪問

判斷連通c++程式碼

// DFS.cpp : 定義控制檯應用程式的入口點。// #include "stdafx.h"#include <iostream>#include <vector>using namespace std;bool isconnected(vect

【資料結構週週練】029 判斷是否為一棵樹演算法原理詳解及程式碼分享

一、題目 設計一個演算法,判斷一個圖G是否為一棵樹,如果是,返回TRUE,否則,返回FALSE。 二、美麗的星座 星座真的好美好美。特別是當人類給它們賦予含義的那一刻,更美,彷彿有了靈魂一般。  是不是很美,是不是?你以為我是讓你過來看星星的嗎?你以為我是

判斷中頂點u與v之間是否存在長度為len的簡單路徑,存在返回1存在返回0

注:程式碼沒寫註釋為了看著清爽點,不懂的地方大家隨時留言給我,互相交流學習。 #include <stdio.h> #include <stdlib.h> #define maxsize 20 typedef struct{ int no

判斷是否是樹

數據結構 edge lis ret ems visit cnblogs null light 一個無向圖G是一顆樹的條件: G必須是無回路的連通圖或者是n-1條邊的連通圖 思路: 如果能通過一次dfs就能夠訪問圖中所有頂點, 並且訪問的邊是n-1條則此圖是一個棵樹

判斷兩點間是否存在長度為K的路徑

false std color arch [] 要求 fin ios 通過 1 #include <iostream> 2 #include <vector> 3 #define MAXN 5 4 using namespace std;

->連通性->連通分量和生成樹

文字描述   對無向圖進行遍歷時,對於連通圖,僅需從圖中任一頂點出發,進行深度優先搜尋或廣度優先搜尋,便可訪問到圖中所有頂點。但對非連通圖,則需從多個頂點出發搜尋,每一次從一個新的起始點出發進行搜尋過程得到的頂點訪問序列恰為其各個連通分量中的頂點集。   對於非連通圖,每個連通分量中的頂點集,和遍歷時走過

判斷是否有迴路有四種方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

HDU4612 Warm up 連通縮點+樹的直徑

這道題乍一看一點思路都沒有QAQ...我好菜啊55555... 直接搜了題解,發現並沒有辣麼難。。無向圖的連通圖縮點後,變成一棵樹(就像有向圖縮點後變成一個有向無環圖),加一條邊一定會構成一個環,為了使橋更少,那麼這個環應該包含到更多的點或邊,那就是樹的直徑了。這樣的話,a

【練習】判斷是否是樹

  一個無向圖G是一棵樹的條件是G必須是無迴路的連通圖或是有n-1條邊的連通圖,這裡採用後者實現。   在深度搜索遍歷的過程中,同時對遍歷過的頂點和邊數計數,當全部頂點都遍歷過且邊數為2∗(n−1)時,這個圖就是一棵樹,否則不是一棵樹。 #include

判斷的連通性,鄰接矩陣表示

 在古老的魔獸傳說中,有兩個軍團,一個叫天災,一個叫近衛。在他們所在的地域,有n個隘口,編號為1..n,某些隘口之間是有通道連線的。其中近衛軍團在1號隘口,天災軍團在n號隘口。某一天,天災軍團的領袖巫妖王決定派兵攻打近衛軍團,天災軍團的部隊如此龐大,甚至可以填江過河。但是巫妖王不想付出不必要的代價,他想知道

鄰接矩陣(二)之 C++詳解

/* * 建立圖(自己輸入資料) */ MatrixUDG::MatrixUDG() { char c1, c2; int i, p1, p2; // 輸入"頂點數"和"邊數" cout << "input vertex number:

鄰接表(一)之 C語言詳解

/* * 建立鄰接表對應的圖(自己輸入) */ LGraph* create_lgraph() { char c1, c2; int v, e; int i, p1, p2; ENode *node1, *node2; LGraph* pG;

鄰接矩陣(一)之 C語言詳解

/* * 建立圖(用已提供的矩陣) */ Graph* create_example_graph() { char vexs[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; char edges[][2] = { {'A'

鄰接表(二)之 C++詳解

/* * 建立鄰接表對應的圖(自己輸入) */ ListUDG::ListUDG() { char c1, c2; int v, e; int i, p1, p2; ENode *node1, *node2; // 輸入"頂點數"和"邊數"

hdu 1272小希的迷宮(並查集判斷迴路)

並查集~~~ 判斷圖是否連通且無迴路 待連線的兩點如果祖先節點相同,那麼就構成迴路 #include<stdio.h> #define max(a,b) a>b?a:b #define min(a,b) a<b?a:b int father[1000

判斷是否是一棵樹

演算法思想:         G必須是無迴路的連通圖或者是n-1條邊的連通圖,這裡採用後者作為判斷條件。採用深度優先搜尋演算法遍歷途中可能訪問到的頂點個數和邊數,如果一次遍歷能訪問到n個頂點和n-1條

連通分量和生成樹

//名詞解釋: //一個連通圖(對於無向圖)的生成樹是一個極小的連通子圖,它含有途中所有的頂點,但只有足以構成一個樹的n-1條邊。 //下面的程式為通過DFS深度優先遍歷一個非連通圖(會生成>1的生成樹,用孩子兄弟鏈作為生成森林的儲存結構)。 #include "s

連通--並查集

題目描述: 標題 求無向圖連通子圖 時間限制 2 S 記憶體限制 10000 Kb 問題描述 求無向圖連通子圖個數 問題輸入 測試資料由m+1行構成,第一行為兩個正整數n(1<n<=30)和m(1<m<100),分別表示頂

【poj1966】Cable TV Network 連通度(最大流)

Description The interconnection of the relays in a cable TV network is bi-directional. The network is connected if there is at lea