Torn To Pieces-------------------------------思维(dfs+stringstream流)
程序员文章站
2022-06-08 17:57:57
...
题意:
给定n个站点连接的情况,最终询问能否从某个站点到达某个站点
解析:
用getline(cin,s) 把整个串读进来
然后用stringstream流 把字符串分解一下
然后把字符串数字化。
然后跑一遍dfs
如果能跑到终点我们直接输出路径。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10000;
int n;
vector<int> G[N],r;
int cnt;
string a,b,s;
map<string,int> v;
map<int ,string > res;
int e;
int ans[N];
int dist[N], q[N]; // dist表示每个点到起点的距离, q 是队列 // 邻接表
bool st[N]; // 存储每个点是否在队列中
int pre[N];
void dfs(int u,int fa)
{
st[u]=1;
r.push_back(u);
if(u==e)
{
for(auto j :r) cout<<res[j]<<" ";
cout<<endl;
exit(0);
}
for(auto j: G[u])
{
if(!st[j]&&j!=fa)
{
dfs(j,u);
}
}
r.pop_back();
}
int main()
{
scanf("%d",&n);
getchar();
for(int i=1;i<=n;i++)
{
getline(cin,s);
stringstream ss(s);
ss>>a;
if(!v[a])
{
v[a]=++cnt;
res[cnt]=a;
}
while(ss>>b)
{
if(!v[b])
{
v[b]=++cnt;
res[cnt]=b;
}
G[v[a]].push_back(v[b]);
G[v[b]].push_back(v[a]);
}
}
int t;
cin>>a>>b;
if(!v[a])
{
v[a]=++cnt;
res[cnt]=a;
}
if(!v[b])
{
v[b]=++cnt;
res[cnt]=b;
}
int s=v[a];e=v[b];
dfs(s,s);
cout<<"no route found"<<endl;
}