没事刷刷Codeforces

1.601A The Two Routes

其实对于边权为1的最短路用bfs也是可以的,但是为了练习还是用了dijkstra啦~

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int inf=0x3f3f3f3f;
bool e[410][410];
int dis1[410],dis2[410];
bool vis1[410],vis2[410];
int n,m;

void dijkstra(int u){
    memset(dis1,0x3f,sizeof(dis1));
    memset(dis2,0x3f,sizeof(dis2));
    memset(vis1,false,sizeof(vis1));
    memset(vis2,false,sizeof(vis2));
    dis1[u]=dis2[u]=0;
    for(int i=0;i<n;++i){
        int mind=inf,mint=-1;
        for(int j=1;j<=n;++j){
            if(!vis1[j]&&dis1[j]<mind){
                mind=dis1[j];
                mint=j;
            }
        }
        if(mint==-1)break;
        vis1[mint]=true;
        for(int j=1;j<=n;++j){
            if(!vis1[j]&&e[j][mint]&&dis1[j]>dis1[mint]+1){
                dis1[j]=dis1[mint]+1;
            }
        }
    }
    for(int i=0;i<n;++i){
        int mind=inf,mint=-1;
        for(int j=1;j<=n;++j){
            if(!vis2[j]&&dis2[j]<mind){
                mind=dis2[j];
                mint=j;
            }
        }
        if(mint==-1)break;
        vis2[mint]=true;
        for(int j=1;j<=n;++j){
            if(!vis2[j]&&!e[j][mint]&&dis2[j]>dis2[mint]+1){
                dis2[j]=dis2[mint]+1;
            }
        }
    }
}

int main(){
    cin>>n>>m;
    int u,v;
    for(int i=0;i<m;++i){
        cin>>u>>v;
        e[u][v]=e[v][u]=true;
    }
    dijkstra(1);
    int ans=max(dis1[n],dis2[n]);
    ans==inf?cout<<-1<<endl:cout<<ans<<endl;
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,438评论 0 10
  • The Inner Game of Tennis W Timothy Gallwey Jonathan Cape ...
    网事_79a3阅读 12,260评论 3 20
  • 母亲查出是白血病,已经持续高烧十八天了,温度始终在四十度以上,各种退烧药,抗生素都用了,不见效。 医生给用了地塞米...
    张喇咪阅读 376评论 8 13
  • [现代诗]墙角·雪梅 文 李佰强 白雪纷纷如蝶飞, 豆蔻芳华墙角梅, 暗香伴一段, 不枉冬韵美。 二月梢头彩云随...
    大雨落幽燕李佰强阅读 1,289评论 2 8
  • (一)照你自己的经验来讲,有何可称为思想的事实 思想一直以来是一个形容词,比如你很有思想,你很美。 如果说,是美的...
    tonyhi阅读 304评论 0 2