hdu1269(鄰接表+dfs)
迷宮城堡
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11191 Accepted Submission(s): 5004
Problem Description 為了訓練小希的方向感,Gardon建立了一座大城堡,裡面有N個房間(N<=10000)和M條通道(M<=100000),每個通道都是單向的,就是說若稱某通道連通了A房間和B房間,只說明可以通過這個通道由A房間到達B房間,但並不說明通過它可以由B房間到達A房間。Gardon需要請你寫個程式確認一下是否任意兩個房間都是相互連通的,即:對於任意的i和j,至少存在一條路徑可以從房間i到房間j,也存在一條路徑可以從房間j到房間i。
Input 輸入包含多組資料,輸入的第一行有兩個數:N和M,接下來的M行每行有兩個數a和b,表示了一條通道可以從A房間來到B房間。檔案最後以兩個0結束。
Output 對於輸入的每組資料,如果任意兩個房間都是相互連線的,輸出"Yes",否則輸出"No"。
Sample Input 3 3 1 2 2 3 3 1 3 3 1 2 2 3 3 2 0 0
Sample Output Yes No
//hdu1269(迷宮城堡&&判斷有向圖是否聯通) //題目大意:已知有n(n<=10000)個點,M(M<=100000)個道路。每條道路都是單向的。求任意兩個點之間是否聯通? //解題思路:由於點n的範圍較大,所以用鄰接表儲存n個點的道路情況。然後依次搜尋n各點能否 //到達剩餘的n-1個點。如果有一個不滿足,就退出迴圈。表示該有向圖不是聯通圖。否則就是。 //這裡我用的是dfs搜尋看是否某個點能否到達其餘的n-1個點。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,head[100010],k,flag,vis[10010],cnt; struct node { int x,y; int next; }edge[100010]; void init() //初始化鄰接表 { k=0; memset(head,-1,sizeof(head)); } void input() //讀取資料 { init(); int i,j,x,y; for(i=0;i<m;i++) { scanf("%d%d",&x,&y); edge[k].x=x; edge[k].y=y; edge[k].next=head[x]; //建x到y的邊。 head[x]=k++; } } void dfs(int x) { int v,i; if(cnt==n-1) return; //可以到達其餘的n-1個點 for(i=head[x];i!=-1;i=edge[i].next) { v=edge[i].y; if(!vis[v]) { vis[v]=1; cnt++; //cnt用來記錄從某點出發所能到達的點數 dfs(v); } } } int main() { int i,j; while(scanf("%d%d",&n,&m)&&(n|m)) { input(); flag=1; for(i=1;i<=n;i++) { cnt=0; memset(vis,0,sizeof(vis)); vis[i]=1; //標記i dfs(i); //搜尋i所能到達的點的個數。 if(cnt<n-1) { flag=0;break; //有一個點到其餘各點不是n-1時,則該圖不聯通。 } //退出迴圈 } if(flag==1) printf("Yes\n"); else printf("No\n"); } return 0; }
相關推薦
hdu1269(鄰接表+dfs)
迷宮城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11191 Accepted Submissi
Connected Components (鄰接表dfs)
滴答滴答---題目連結 Write a program which reads relations in a SNS (Social Network Service), and judges that given pairs of users are reachable each o
[圖] 7.30 求有向圖中所有簡單迴路-鄰接表-DFS
題目來源:嚴蔚敏《資料結構》C語言版本習題冊 7.30 【題目】試寫一個求有向圖G中所有簡單迴路的演算法 【測試資料】123456對應ABCDEF 【結果】 【答案】 /*-----------------------------------------
資料結構作業——圖的儲存及遍歷(鄰接矩陣、鄰接表+DFS遞迴、非遞迴+BFS)
鄰接矩陣存圖 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Last Modified time: 2018-11-0
資料結構之DFS遞迴與非遞迴遍歷鄰接表存圖
學習鄰接表存圖請看:https://blog.csdn.net/HPU_FRDHR/article/details/83957240 DFS (深度優先搜尋) 深度優先搜尋演算法(英語:Depth-First-S
zcmu 2201 (dfs+鄰接表)
題目連結:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2201 思路:建立四個陣列U,D,L,R,分別表示四個方位,儲存每個節點的上下左右的資訊。 然後進行深搜,查找出長度最大的節點,並記錄它的長度。 #include<ios
資料結構BFS與DFS鄰接表
#include<bits/stdc++.h> #define MVNum 100 #define OK 1 #define ERROR 0 using namespace std; typedef int Status; typedef int OtherTnfo; typedef c
[圖] 7.28 找出u到v的所有路徑-鄰接表(有向圖)-DFS
題目來源:嚴蔚敏《資料結構》C語言版本習題冊 7.28 【題目】已知有向圖和圖中兩個頂點u和v,試編寫演算法求有向圖中從u到v的所有簡單路徑,並以下圖為例手工執行你的演算法,畫出相應的搜尋過程圖 【測試資料】 【結果】 【答案】 /*----------
鄰接表儲存圖的DFS/BFS詳解
注 :關於鄰接表的建立,輸出連結 https://blog.csdn.net/qq_42146775/article/details/84898997 理解DFS/BFS 演算法 void BFS(這個節點) { 標記這個節點 指向這個節點的第一個臨界點 while(
資料結構 圖的鄰接表儲存結構及DFS/BFS遍歷
//鄰接表 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #define INF 999 using namespace std; typedef
實驗四(建圖,無向圖+鄰接矩陣(BFS,DFS(遞迴+非遞迴)),有向圖+鄰接表(BFS,DFS(遞迴+非遞迴)),拓撲排序)
//Sinhaeng Hhjian #include<bits/stdc++.h> using namespace std; const int N=100; const int MAX=1000; int book[N], cnt; struct node{
【資料結構】圖的基本操作——圖的構造(鄰接矩陣,鄰接表),遍歷(DFS,BFS)
鄰接矩陣實現如下: /* 主題:用鄰接矩陣實現 DFS(遞迴) 與 BFS(非遞迴) 作者:Laugh 語言:C++ ******************************************* 樣例輸出如下: 請選擇圖的型別(a - 無向圖, b - 有向圖):a 請輸入總頂點
基於鄰接矩陣和鄰接表的兩種方法實現無向圖的BFS和DFS
廣度優先搜尋(Breadth-First-Search)和深度優先搜尋(Deep-First-Search)是搜尋策略中最經常用到的兩種方法,特別常用於圖的搜尋. BFS的思想: 從一個圖的某一個頂點V0出發,首先訪問和V0相鄰的且未被訪問過的
鄰接表實現--圖的深度優先遍歷DFS和廣度優先遍歷BFS
圖論中一個基本的概念就是遍歷。就是訪問到圖的每一個頂點,同時每個頂點只訪問一次。 DFS和BFS的概念和思路網上說明的很詳細了。但是網上很多程式碼實現有缺陷,基本都沒有考慮圖不連通的情況,比如某個頂點A和其它任何一個頂點都不關聯,
鄰接表實現有向圖BFS、DFS、拓撲排序
圖的大家族 常用圖的儲存結構有兩種:鄰接矩陣,鄰接表。一個數組,一個連結串列,可見覆雜的資料結構是建立在基礎結構之上的,在這裡選擇鄰接表儲存,邊比較少時省空間。 圖按照有無方向,有無權重,分為四類 無向無權:無向圖 無向有權:無向網 有向無權:有向圖
PTAL2-007 家庭房產解題報告---DFS遍歷(鄰接表vector實現)
L2-007 家庭房產
基於鄰接表實現的DFS深度優先搜尋
上一篇文章中說道用鄰接矩陣來實現深度優先搜尋 這裡我們來談用鄰接表來實現深度優先搜尋 鄰接表如下所示: 由於java中對於指標的使用弱化 這裡我用list來模擬連結串列操作 import java.util.ArrayList; import java.util.Li
資料結構之圖(鄰接表儲存,DFS和BFS遍歷)
來看下面的一個簡單的圖, 那麼這樣的一個圖,我們應該用什麼儲存結構來儲存它呢?常用的是鄰接矩陣和鄰接表,這裡鄰接矩陣不做講解,如下所有程式碼都是以鄰接表作為儲存結構,所以這裡就只講解下鄰接表。那麼什麼是鄰接表呢?如何構造呢? 鄰接表是一
圖的鄰接表的遍歷(DFS(遞迴,非遞迴),BFS,拓撲排序)
要求:對有向圖進行DFS(深度優先遍歷)、BFS(廣度優先遍歷)、拓撲排序。寫出深度優先遍歷的遞迴和非遞迴演算法。 程式碼如下: 在此非常感謝crazy_27的評論,給我指出錯誤。 #include <stdio.h> #include <stdlib.h
圖的dfs遞迴(非遞迴)遍歷和bfs遍歷(鄰接表)
1.深度優先遍歷是連通圖的一種遍歷策略.其基本思想如下: 設x是當前被訪問的頂點,在對x做過訪問的標記之後,選擇一條從x出發的未檢測過的邊(x,y),若發現頂點y已經訪問過了,則重新選擇另一條從x出發的未檢測過的邊,否則沿邊(x,y)到達未曾訪問過的y,對y訪問並將其標