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