資料結構——圖 連通圖與連通分量
note: 連通是無向圖中的概念
接下來介紹兩個演算法:判斷圖的連通性與標記連通分量。
1. 判斷一個圖是否連通. Determine whether an undirected graph is connected
class Undirected : virtual public Network { public: bool Connected(); }; bool Undirected::Connect() {// Return true iff graph is connected. int n = Vertices(); // set all vertices as not reached int *reach = new int [n+1]; for (int i = 1; i <= n; i++) reach[i] = 0; //mark vertices reachable from vertex 1 DFS(1, reach, 1); //check if all vertices marked for (int i = 1; i<= n; i++) if (!reach[i]) return false; return true; }
2.Component labeling. 標記連通分量
下面這個程式的複雜性是O(n^2); 用鄰接連結串列描述圖時,是O(n+e)
int Undirected::LabelComponents(int L[]) {// Label the components of the graph. //Return the number of components and set L[1:n] to represent a labeling of vertices by component. int n = Vertices(); // assign all vertices to no component for (int i = 1; i<=n; i++) L[i] = 0; int label = 0; // ID of last component // identify components for (int i = 1; i <= n; i++) { if(!L[i]){// unreached vertex //vertex i is in a new component label++; BFS(i, L, label); }// mark new component } return label; }
相關推薦
資料結構實驗之圖論四:迷宮探索(判斷連通圖)
Problem Description 有一個地下迷宮,它的通道都是直的,而通道所有交叉點(包括通道的端點)上都有一盞燈和一個開關;請問如何從某個起點開始在迷宮中點亮所有的燈並回到起點? Input 連續T組資料輸入,每組資料第一行給出三個正整數,分別表示地下迷宮的結點數N(1 &l
【資料結構】點陣圖與布隆處理器
文章目錄 1.點陣圖的實現 BitMap.h BitMap.c 2.布隆的實現 BloomFilter.h BloomFilter.c 1.點陣圖
資料結構 筆記:圖的定義與操作
定義 -圖是由頂點集合(Vertex)及頂點間的關係集合(Edge)組成的一種資料結構 -Graph = (V,E) -V= 是頂點的有窮非空集合 -E=是頂點之間關係的有窮集合 無向邊 -頂點x和y之間的邊沒有方向,則稱該邊為無向邊 -<x,y> 與<
資料結構作業15—圖的遍歷與最小生成樹(選擇題)
2-1給定有權無向圖如下。關於其最小生成樹,下列哪句是對的? (3分) A.邊(B, F)一定在樹中,樹的總權重為23 B.邊(H, G)一定在樹中,樹的總權重為20 C.最小生成樹唯一,其總權重為20 D.最小生成樹不唯一,其總權重為23
【資料結構】點陣圖BitMap與布隆過濾器BloomFilter
首先先看一下下面這個騰訊的面試題:給40億個不重複的無符號整數,沒排過序。給一個無符號整數,如何快速判斷一個數是否在這40億個數中。 【騰訊】思路一: 最容易想到的解法就是遍歷所有的40多億個整數,然後一個一個判斷。但是這個需要花費的記憶體是多大呢? 大家可以去算一下
資料結構7-關於“圖”的生成與操作的例項
程式實現用鄰接表儲存的形式建立一棵無向圖,應用深度優先搜尋的方法遍歷圖中各點,並打印出資料,程式碼如下所示: #include"stdio.h" typedef struct ArcNode{ /*單鏈表中的結點的型別*/ int adjvex; /*該邊指向的頂點在
資料結構基礎 之 圖 的 鄰接矩陣實現與鄰接表實現
【鄰接矩陣】 鄰接矩陣,就是一個反應邊與邊之間聯絡的二維陣列。這個二維陣列我們用matrix[numV][numV]表示,其中numV是頂點數。 對於無權圖 若頂點Vi和Vj之間有邊,則matrix[Vi][Vj]=1;否則matrix[Vi][Vj]=0。 對
資料結構基礎之圖(下):最短路徑
轉自:http://www.cnblogs.com/edisonchou/p/4691020.html 圖(下):最短路徑 圖的最重要的應用之一就是在交通運輸和通訊網路中尋找最短路徑。例如在交通網路中經常會遇到這樣的問題:兩地之間是否有公路可通;在有多條公路可通的情況下,哪
資料結構基礎之圖(中):最小生成樹演算法
轉自:http://www.cnblogs.com/edisonchou/p/4681602.html 圖(中):最小生成樹演算法 圖的“多對多”特性使得圖在結構設計和演算法實現上較為困難,這時就需要根據具體應用將圖轉換為不同的樹來簡化問題的求解。 一、生成樹與最小生成
資料結構基礎之圖(中):圖的遍歷演算法
轉自:http://www.cnblogs.com/edisonchou/p/4676876.html 圖(中):圖的遍歷演算法 上一篇我們瞭解了圖的基本概念、術語以及儲存結構,還對鄰接表結構進行了模擬實現。本篇我們來了解一下圖的遍歷,和樹的遍歷類似,從圖的某一頂點出發訪問
資料結構基礎之圖(上):圖的基本概念
轉自:http://www.cnblogs.com/edisonchou/p/4672188.html 圖(上):圖的基本概念 前面幾篇已經介紹了線性表和樹兩類資料結構,線性表中的元素是“一對一”的關係,樹中的元素是“一對多”的關係,本章所述的圖結構中的元素則是“多對多”的
資料結構實驗之圖論三:判斷可達性(SDUT 2138)(簡單DFS)
#include <bits/stdc++.h> using namespace std; int gra[1002][1005]; int vis[1002]; int n,m; void dfs(int x) { vis[x] = 1; for(int i = 1
資料結構實驗之圖論二:圖的深度遍歷(SDUT 2107)(簡單DFS)
題解:圖的深度遍歷就是順著一個最初的結點開始,把與它相鄰的結點都找到,也就是一直往下搜尋直到盡頭,然後在順次找其他的結點。 #include <bits/stdc++.h> using namespace std; int gra[200][200]; //儲存圖的大小 int
資料結構演算法題/圖的生成樹:Prim演算法和Kruskal
1. 生成樹 在一個任意連通圖G中,如果取它的全部頂點和一部分邊構成一個子圖G',即:V(G')=V(G)和E(G')⊆E(G) 若同時滿足邊集E(G')中的所有邊既能夠使全部頂點連通而又不形成任何迴路,則稱子圖G'是原圖G的一棵生成樹。 連通圖是n個點n-1條邊。 在圖G的一
《資料結構》08-圖8 How Long Does It Take
題目 Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project. Input Specifi
《資料結構》08-圖7 公路村村通
題目 現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。 輸入格式: 輸入資料包括城鎮數目正整數N(≤1000)和候選道路數目M(≤3N);隨後的M行對應M條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮
《資料結構》07-圖6 旅遊規劃
題目 有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度、以及該公路要收取的過路費。現在需要你寫一個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。 輸入格式: 輸入說明:輸入資料的第1行給出4個正整數N、M、S
《資料結構》07-圖4 哈利·波特的考試
題目 哈利·波特要考試了,他需要你的幫助。這門課學的是用魔咒將一種動物變成另一種動物的本事。例如將貓變成老鼠的魔咒是haha,將老鼠變成魚的魔咒是hehe等等。反方向變化的魔咒就是簡單地將原來的魔咒倒過來念,例如ahah可以將老鼠變成貓。另外,如果想把貓變成魚,可以通過念一個直接魔咒la
《資料結構》06-圖3 六度空間
題目 “六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”如圖1所示。 圖1 六度空間示意圖 “六度空間”理論雖
信管117118李志榮資料結構實驗六---圖的實驗
#include<iostream> #include<string> using namespace std; template<typename T> class Graph { private: enum { zero = 0, Max = 5 }; i