HDU_2544_最短路
题意:第一个路口是起点,第n个(最后一个)路口是终点,问最短路径。
总结:第一个dijkstra。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; #define N 105 #define INF 0x7ffffff int map[N][N],visit[N],dis[N]; int dijkstra(int s,int n) { memset(visit,0,sizeof(visit)); for(int i=1;i<=n;i++) dis[i]=map[s][i]; dis[s]=0; visit[s]=1; for(int i=1;i<=n;i++) { int tmp=INF,k; for(int j=1;j<=n;j++) { if(!visit[j]&&dis[j]<tmp) ///找到离s最近的点 { tmp=dis[j]; k=j; } } if(tmp==INF) break; visit[k]=1; for(int j=1;j<=n;j++) { if(!visit[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j]; } } return dis[n]; } int main() { int n,m,a,b,c; while(~scanf("%d%d",&n,&m)&&n&&m) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) map[i][j]=INF; for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c; } printf("%d\n",dijkstra(1,n)); } return 0; }