吝啬的国度(深搜)

来源:互联网 发布:java nio长连接实现 编辑:程序博客网 时间:2024/06/06 16:54

题目传送门

题目描述:

在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。

解题思路:

使用集合存储相通道路,从起点开始开始搜索,直到全部的城市前城市找到。

代码部分

#include<iostream>#include<string>#include<string.h>#include<sstream>#include<queue>#include<vector>using namespace std;vector <int> city[100005];  //存储相通的道路int pre[100005];  //标记上一号城市int m,n,s,a,b;void dfs(int s){    for (vector<int>::iterator it=city[s].begin(); it!=city[s].end(); it++)//遍历全部相通道路    {        if (pre[*it])  //如果已近找到上一号城市            continue;        pre[*it]=s;   //未找到把s标记为上一号城市        dfs(*it);         }}int main(){    cin>>n;    while (n--)    {        memset(city,0,sizeof(city));        memset(pre,0,sizeof(pre));        cin>>m>>s;        for (int i=1; i<m; i++)        {            cin>>a>>b;            city[a].push_back(b);            city[b].push_back(a);//这两句话表示a,b相通        }        pre[s]=-1;  //初始道路        dfs(s);        for(int i=1; i<=m; ++i)        {            cout<<pre[i]<<" ";        }        cout<<endl;    }    return 0;}
原创粉丝点击