时间限制:1秒 内存限制:128M
题目描述
罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。
现在给出直接相邻城市的路长度,罗老师想知道从城市1到城市n,最短多少距离。
输入描述
输入n, m,表示n个城市和m条路;
接下来m行,每行a b c, 表示城市a与城市b有长度为c的路。
输出描述
输出1到n的最短路。如果1到达不了n,就输出-1。
样例
输入
5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
输出
90
提示
【数据规模和约定】
1≤n≤2000
1≤m≤10000
0≤c≤10000
不多bb,上代码
#include<bits/stdc++.h> using namespace std; int g[2005][2005]; int n,m; int dis[2005]; bool used[2005]; int main(){ memset(g,0x3f,sizeof(g)); cin>>n>>m; for(int i=1;i<=m;++i){ int a,b,c; scanf("%d%d%d",&a,&b,&c); g[a][b]=min(g[a][b],c); g[b][a]=min(g[b][a],c); } memset(dis,0x3f,sizeof(dis)); dis[1]=0; for(int i=1;i<=n;++i){ int minn=0x3f3f3f3f,minn_j=0; for(int j=1;j<=n;++j){ if(used[j]==false&&dis[j]<minn){ minn=dis[j]; minn_j=j; } } if(minn_j==0) break; used[minn_j]=true; for(int j=1;j<=n;j++) if(used[j]==false) dis[j]=min(dis[j],dis[minn_j]+g[minn_j][j]); } if(dis[n]==0x3f3f3f3f) cout<<-1; else cout<<dis[n]; }
请大家