最短路径模板

来源:互联网 发布:商业系统域名 编辑:程序博客网 时间:2024/05/20 22:29

模板 :

//起点:1 终点:n 求最短路径 #include<stdio.h>#include<string.h>#define maxn 1000000#define N 1000int map[N][N],dis[N],n;bool vis[N];void Dijkstra(){int i,j;for(i=1;i<=n;i++){dis[i]=maxn;//一开始把距离设置成无限远 vis[i]=0;}dis[1]=0;for(i=1;i<=n;i++){int tmp=maxn;int k;for(j=1;j<=n;j++)//先找到距离起始点最短的点,并将下标保存在k中 {if(!vis[j]&&dis[j]<tmp)   tmp=dis[k=j];}vis[k]=1;for(j=1;j<=n;j++)//更新 dis数组 {if(!vis[j]&&dis[j]>dis[k]+map[k][j])   dis[j]=dis[k]+map[k][j];}}}int main(){int i,j,m;while(~scanf("%d%d",&n,&m)&&n+m!=0){for(i=1;i<N;i++)   for(j=1;j<N;j++){   map[i][j]=maxn;   }int a,b,time;for(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&time);map[a][b]=map[b][a]=time; }Dijkstra();printf("%d\n",dis[n]);}return 0;}


过程动画:

0 0
原创粉丝点击