時間限制:
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)
樣例輸入
110 1
1 91 8
8 10
10 3
8 61 2
10 4
9 53 7
樣例輸出
-1 1 10 10 9 8 3 1 1 8
初學廣搜,當時資料結構沒學,感謝干神幫忙/(ㄒoㄒ)/~~。自己摸索著建圖,用c寫的,後來學會更多知識後知道用c++stl寫更為方便,純手工模擬佇列操作,鍊錶操作,崩潰多次,最終還是過了,這其實就是最基本的廣搜題,用c++的stl和鄰接矩陣建圖能節省一大部分的**量,送給初學者們看看吧。
#include #include #include struct city;
typedef struct city path;
path *queue[100000];
int result[100000];
void bfs(path *s,path num,int count)
tmp=tmp->next;
}front++;
}for(int j=1;j<=count;j++)
printf("%d ",result[j]);
return;
}int main()
bfs(num+x,num,n);
putchar('\n');
for(int j=0;j<100000;j++)
queue[j]=null;
for(int j=0;j<100000;j++)
result[j]=0;
}return 0;
}
#include #include #include #include #include #include using namespace std;
int v[100004],s,n;
map>q;
struct node;
void bfs()}}
for(int i = 1;i <= n;i++)
printf("%d ",ans[i]);
return;
}int main()
bfs();
}return 0;
}
nyoj20 吝嗇的國度
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...
NYOJ 20 吝嗇的國度
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...
NYOJ 20 吝嗇的國度
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...