每日acm 吝嗇的國度 簡單的深搜題

來抄首詩.....

//風雨難洗心痕,滄桑不滅情傷。莫要輕言亙古,離散纔看荒涼。


最近有時間,把近段時間寫的一些ACM題都慢慢貼出來,題目來自南陽理工學院。以後應該會慢慢整理成一個個模塊.....

題目如下,其實就是要輸出從S到N的所走的每個城市的上一個城市,直到走到N市爲止。

那麼就用深搜解決。


吝嗇的國度

時間限制:1000 ms  |  內存限制:65535 KB
難度:3
描述
在一個吝嗇的國度裏有N個城市,這N個城市間只有N-1條路把這個N個城市連接起來。現在,Tom在第S號城市,他有張該國地圖,他想知道如果自己要去參觀第T號城市,必須經過的前一個城市是幾號城市(假設你不走重複的路)。
輸入
第一行輸入一個整數M表示測試數據共有M(1<=M<=5)組
每組測試數據的第一行輸入一個正整數N(1<=N<=100000)和一個正整數S(1<=S<=100000),N表示城市的總個數,S表示參觀者所在城市的編號
隨後的N-1行,每行有兩個正整數a,b(1<=a,b<=N),表示第a號城市和第b號城市之間有一條路連通。
輸出
每組測試數據輸N個正整數,其中,第i個數表示從S走到i號城市,必須要經過的上一個城市的編號。(其中i=S時,請輸出-1)
樣例輸入
1
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7
樣例輸出
-1 1 10 10 9 8 3 1 1 8



//  #include "iostream" #include "vector" using namespace std; vector<int>a[100005]; int b[100005], n, s;  //b[]用來存儲前座標

void DFS(int x, int y)//深搜 { for (int i = 0; i < a[x].size(); i++) { if (a[x][i] != y) DFS(a[x][i], b[a[x][i]] = x);//b[]用來記錄前一個a[]的座標,然後繼續下一個a[]深搜 } return; }


int main() { int x, y,k; cin >> k; while (k--) { cin >> n >> s; for (int i = 1; i < n; i++) { a[i].clear();//清除前n個 } for (int i = 1; i < n; i++) { cin >> x >> y; a[x].push_back(y);//x和y互相關聯 a[y].push_back(x);//x和y互相關聯 } b[s] = -1;//初始化走到b[s]時爲-1 DFS(s, -1);//深搜開始 for (int i = 1; i <= n; i++) { cout << b[i] << " "; }
return 0; } }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章