920. 最优乘车根据题意建图求最短路

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了920. 最优乘车根据题意建图求最短路相关的知识,希望对你有一定的参考价值。


https://www.acwing.com/problem/content/description/922/
根据每一条线,建边,注意是有向边。求最短路,最短路的结果是最少的坐车次数,减1即为最少的换乘次数。

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int g[N][N],dist[N],st[N];
int n,m;
string s,a;
void Dijkstra()
{
    memset(dist,0x3f,sizeof dist);
    dist[1]=0;
    for(int i=0;i<n;i++)
    {
        int t=-1;
        for(int j=1;j<=n;j++) if(!st[j]&&(t==-1 || dist[j]<dist[t])) t=j;
        st[t]=1;
        for(int j=1;j<=n;j++) dist[j]=min(dist[j],dist[t]+g[t][j]);
    }
}
int main(void)
{
    cin>>m>>n;
    memset(g,0x3f,sizeof g);
    getline(cin,s);
    while(m--)
    {
       getline(cin,s);
       vector<int>ve;
       stringstream l(s);
       while(l>>a) ve.push_back(stoi(a));
       for(int i=0;i<ve.size();i++) 
        for(int j=i+1;j<ve.size();j++) 
        {
            int a=ve[i],b=ve[j],c=1;
            g[a][b]=min(g[a][b],c);
        }
    }
    Dijkstra();
    if(dist[n]==0x3f3f3f3f) puts("NO");
    else cout<<dist[n]-1;
    return 0;
}

以上是关于920. 最优乘车根据题意建图求最短路的主要内容,如果未能解决你的问题,请参考以下文章

第三章 图论未完成

HDU - 3035 War(对偶图求最小割+最短路)

[Hbfs] lc815. 公交路线(建图+多源bfs+bfs最短路+思维+好题)

分层图求最短路

AcWing 920. 最优乘车 BFS DIJKSTRA SPFA 方法

HN0I2000最优乘车 (最短路变形)