51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)
2016-12-22 20:54
411 查看
题目链接
中文题,迪杰斯特拉最短路径算法模板题。
![](https://images2015.cnblogs.com/blog/917714/201612/917714-20161222205335917-1276316020.png)
中文题,迪杰斯特拉最短路径算法模板题。
![](https://images2015.cnblogs.com/blog/917714/201612/917714-20161222205335917-1276316020.png)
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f int visit[510],vis[510],map[510][510],low[510],a[510]; int n,m,start,end; void dijkstra() { int min,max,i,j,next; memset(visit,0,sizeof(visit)); visit[start]=1; for(i=0;i<n;i++) { vis[i]=map[start][i]; low[i]=a[start]+a[i]; } low[start]=a[start]; for(i=0;i<n;i++) { min=INF; max=0; for(j=0;j<n;j++)//找到时间最小的 前提时间小 其次是钱多 { if(min>vis[j]&&!visit[j]) { min=vis[j]; next=j; max=low[j]; } if(min==vis[j]&&!visit[j]&&max<low[j]) { next=j; max=low[j]; } } visit[next]=1; for(j=0;j<n;j++)//更新到时间最小 前提时间最小 其次是钱多 { if(!visit[j]&&vis[j]>vis[next]+map[next][j]) { vis[j]=vis[next]+map[next][j]; low[j]=low[next]+a[j]; } if(!visit[j]&&vis[j]==vis[next]+map[next][j]&&low[j]<low[next]+a[j]) low[j]=low[next]+a[j]; } } printf("%d %d\n",vis[end],low[end]); } int main() { int i,j,x,y,z; while(~scanf("%d%d%d%d",&n,&m,&start,&end)) { for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) for(j=i;j<n;j++) { if(i==j) map[i][j]=0; else map[i][j]=map[j][i]=INF; } while(m--) { scanf("%d%d%d",&x,&y,&z); if(map[x][y]>z) map[x][y]=map[y][x]=z; } dijkstra(); } return 0; }
相关文章推荐
- 51nod 1459 迷宫游戏(迪杰特斯拉Dijkstra算法)
- 51Nod 1459 迷宫游戏
- 51NOD 1459 迷宫游戏
- 51nod 1459 迷宫游戏
- 51Nod - 1459 迷宫游戏
- 51nod 1459 迷宫游戏Dijkstra变形
- (老弱病残康复训练)51nod 1459 迷宫游戏(最短路)
- 51Nod 1459 迷宫游戏
- 51NOD 1459 迷宫游戏
- 51nod1459 迷宫游戏 (最短路径)
- 51nod--1459 迷宫游戏 (dijkstra)
- 51Nod - 1459 迷宫游戏(未优化的djkstra)
- 51nod 1459 迷宫游戏 dijkstra变形
- 51nod 1459 迷宫游戏(Dijkstra)
- 51nod 1459 迷宫游戏 【djstl】
- 51Nod 1459 迷宫游戏 (dijkstra)
- 51nod 1459 迷宫游戏(最短路)
- 51nod 1459 迷宫游戏
- 51nod_1459_迷宫游戏_最短路
- 51nod 1459 迷宫游戏