题目描述: 对于一个图 给定你一些边表示火车能走的边,没给的就是巴士能走的边,现在要求巴士和火车不能在除终点外的点同时相遇(每走一次火车和巴士都用一小时)
问两种交通工具最短时间中的最长时间
分析:以前做过这个题。。。。。。。。。。。 这次还是没有考虑到巴士和火车肯定有一种可以直接到达终点。 所以可以转化为求另外一种交通工具的最短路(无权) 即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; }