题目描述: 对于一个图 给定你一些边表示火车能走的边,没给的就是巴士能走的边,现在要求巴士和火车不能在除终点外的点同时相遇(每走一次火车和巴士都用一小时)
问两种交通工具最短时间中的最长时间
分析:以前做过这个题。。。。。。。。。。。 这次还是没有考虑到巴士和火车肯定有一种可以直接到达终点。 所以可以转化为求另外一种交通工具的最短路(无权) 即bfs(bfs注意也要标记走过的点,并且可以记录父节点来跟踪)
ac代码:
#include<bits/stdc++.h>
using namespace std;
const int MAX=4e2+9;
int vis[MAX];
int flag;
int n,m;
int mapp[MAX][MAX];
int main(){
// freopen("1.txt","r",stdin);
cin>>n>>m;
memset(mapp,0,sizeof(mapp));
memset(vis,0,sizeof(vis));
while(m--){
int x,y;
cin>>x>>y;
mapp[x][y]=1;
mapp[y][x]=1;
}
if(mapp[1][n]==1)flag=0;
else flag=1;
queue<int> que;
// que.clear();
int step[MAX];
memset(step,0,sizeof(step));
que.push(1);
vis[1]=1;
while(!que.empty()){
int x=que.front();
que.pop();
for(int i=1;i<=n;i++)
if(!vis[i]&&mapp[x][i]==flag){
que.push(i);
vis[i]=1;
step[i]=step[x]+1;
if(i==n) {
cout<<step[n]<<endl;
exit(0);
}
}
}
cout<<-1<<endl;
}

京公网安备 11010502036488号