吝嗇的國度(dfs)

2021-09-10 23:09:16 字數 1605 閱讀 3742

description

在乙個吝嗇的國度裡有n個城市,這n個城市間只有n-1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市(假設你不走重複的路)。

input

第一行輸入乙個整數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號城市之間有一條路連通。

output

每組測試資料輸n個正整數,其中,第i個數表示從s走到i號城市,必須要經過的上乙個城市的編號。(其中i=s時,請輸出-1)

sample input

1

10 1

1 91 8

8 10

10 3

8 61 2

10 4

9 53 7

sample output
-1 1 10 10 9 8 3 1 1 8

思路:首先這是一道深搜題,如果我們用正常的二維陣列來做的話,發現是完全行不通的,因為n太大了,所以在這裡我們需要用到vector

容器來做,建立陣列容器需要用到#include< vector>,vector就是乙個不定長陣列,vector< int> a就是乙個類似於int a的整數

陣列,只不過他的長度不確定,可以用a.size()讀取他的長度。而vector< int>a[max]就是乙個二維陣列,只是第一維的大小是固定的

(不超過max),二維的大小就不固定了,這道題之所以用到vector就是利用了他的不定長,

(1)標頭檔案#include.

(2)建立vector物件,vectorv;

(3)尾部插入數字:v.push_back(a);

(5)向量大小:v.size();

用a來表示每個城市的父節點,用vector < int > v[100005]來表示每個城市與哪些城市相通

#include

#include

#include

#include

#include

using namespace std;

int n,m;

int a[

100005];

//a儲存的是每個節點的父節點 也就是所在城市的前乙個城市

vector<

int> v[

100005];

//vector容器儲存的是每個城市與其他城市通路

void

dfs(

int m)

}int

main()

dfs(m)

;for

(int i=

1;i<=n;i++

)printf

("\n");

}return0;

}

成功**於一點一滴的努力和積累,加油!!!

NYOJ 吝嗇的國度(DFS)

問題描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入 第一行輸入乙個整數m表示測試資料共有m 1 m 5 組 每組測試資料的第一...

acm 吝嗇的國度 dfs 水

題目 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸...

NYOJ 20 吝嗇的國度 DFS

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...