團體程式設計天梯賽-練習集 L2-031 深入虎穴 (25分) dfs深搜+bfs廣搜的兩種思路
L2-031 深入虎穴 (25分)
著名的王牌間諜 007 需要執行一次任務,獲取敵方的機密情報。已知情報藏在一個地下迷宮裡,迷宮只有一個入口,裡面有很多條通路,每條路通向一扇門。每一扇門背後或者是一個房間,或者又有很多條路,同樣是每條路通向一扇門…… 他的手裡有一張表格,是其他間諜幫他收集到的情報,他們記下了每扇門的編號,以及這扇門背後的每一條通路所到達的門的編號。007 發現不存在兩條路通向同一扇門。
內線告訴他,情報就藏在迷宮的最深處。但是這個迷宮太大了,他需要你的幫助 —— 請程式設計幫他找出距離入口最遠的那扇門。
輸入格式:
輸入首先在一行中給出正整數 N(<10^5),是門的數量。最後 N 行,第 i 行(1 ≤ i ≤ N)按以下格式描述編號為 i 的那扇門背後能通向的門:
K D[1] D[2] … D[K]
其中 K 是通道的數量,其後是每扇門的編號。
輸出格式:
在一行中輸出距離入口最遠的那扇門的編號。題目保證這樣的結果是唯一的。
輸入樣例:
13
3 2 3 4
2 5 6
1 7
1 8
1 9
0
2 11 10
1 13
0
0
1 12
0
0
輸出樣例:
12
本題思路:本題實際上就是求樹高,因此有深搜和廣搜兩種方式。
需要特別注意,本題沒有告知入口在哪裡,因此需要找到入口,即找到沒有前驅節點的節點編號。
dfs深搜
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
const int N = 100005;
using namespace std;
int n, k;
int ans, maxn = -1, maxnode = 1;
int vis[N], arr[N];
vector<int> vec[N];//關係樹
void dfs(int root, int len){
vis[root] = 1;
if(len>maxn){
maxn = len;
maxnode = root;
}
for(int i = 0; i < vec[root].size(); i ++){
if(vis[vec[root][i]]==0)
dfs(vec[root][i], len+1);
}
}
int main(){
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> k;
while(k--){
cin >> ans;
arr[ans]++;
vec[i].push_back(ans);
}
}
for(int i = 1; i <= n; i ++){
if(arr[i] == 0){
dfs(i, 1);
break;
}
}
cout << maxnode << endl;
return 0;
}
bfs廣搜
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
const int N = 100005;
using namespace std;
int n, k, root;
vector<int> vec[N];
queue<int> qu;
int arr[N],deep[N];
void bfs(int root){//返回
int temp;
qu.push(root);
deep[root] = 1;
while(!qu.empty()){
temp = qu.front();
qu.pop();
for(int i = 0; i < vec[temp].size(); i++){
qu.push(vec[temp][i]);
}
}
cout << temp << endl;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> k;
while(k--){
int ans;
cin >> ans;
arr[ans] ++;
vec[i].push_back(ans);
}
}
for(int i = 1; i <= n; i ++){//尋找入口
if(arr[i] == 0){
bfs(i);
break;
}
}
return 0;
}
相關文章
- 團體程式設計天梯賽-練習集程式設計
- 團體程式設計天梯賽-練習集 L1-038 新世界程式設計
- 深搜dfs
- 【CCCC】PAT : 團體程式設計天梯賽-練習集 L3 答案(01-23)程式設計
- 深度DFS 和 廣度BFS搜尋演算法學習演算法
- 團體程式設計天梯賽-練習集 L1-050 倒數第N個字串 (15分)程式設計字串
- 2024團體程式設計天梯賽——賽後總結程式設計
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 廣度優先搜尋(BFS)思路及演算法分析演算法
- 演算法競賽——BFS廣度優先搜尋演算法
- bfs廣度優先搜尋
- JAVA圖搜尋演算法之DFS-BFSJava演算法
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 2024 年 GPLT 團體程式設計天梯賽(個人感受 + 題解)程式設計
- 2024年第九屆CCCC團體程式設計天梯賽 遊記程式設計
- 團體程式設計天梯賽L2-022 重排連結串列程式設計
- 2020年團體程式設計天梯賽-總決賽 L2-2 口罩發放程式設計
- DFS與BFS——理解簡單搜尋(中文虛擬碼+例題)
- 團體程式設計天梯賽-玩轉二叉樹(簡潔建樹)程式設計二叉樹
- DFS 深搜專題 入門典例 -- 凌宸1642
- 深度優先搜尋(DFS)思路及演算法分析演算法
- 天梯賽練習集 L2-041 插松枝 模擬
- 用Wikidata做實體搜尋的兩種方案
- 2024天對程式設計天梯賽程式設計
- js版本的(廣、深)度優先搜尋JS
- 2020年團體程式設計天梯賽-總決賽 L2-4 網紅點打卡攻略程式設計
- 天梯賽練習集 L2-049 魚與熊掌 查詢
- 【演算法】廣度/寬度優先搜尋(BFS)演算法
- 20240331_搜尋練習
- 2020年團隊程式設計天梯賽L2 -2 口罩發放程式設計
- DFS(深度優先搜尋)
- PTA 天梯賽備賽 L1-006 連續因子 (20 分)(搜尋)
- PAT-B 1047 程式設計團體賽程式設計
- 【力扣】島嶼數量(體會一下dfs和bfs思路的實質)力扣
- 深度學習在美團搜尋廣告排序的應用實踐深度學習排序
- DAG bfs + dfs 126,
- 0演算法基礎學演算法 搜尋篇第二講 BFS廣度優先搜尋的思想演算法
- 程式設計練習程式設計