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. 最优乘车根据题意建图求最短路的主要内容,如果未能解决你的问题,请参考以下文章
[Hbfs] lc815. 公交路线(建图+多源bfs+bfs最短路+思维+好题)