北大ACM2387——Til the Cows Come Home

来源:互联网 发布:python ppt 编辑:程序博客网 时间:2024/06/05 18:44

题目的意思是求解从路标N到路标1的最短路径,简单的最短路径题目,Dijkstra或者Bellman_Ford算法都可以过。

题目有一个坑:输入有重边,所以要选择最小的长度。

下面是AC的代码:


#include <iostream>#include <cstdio>using namespace std;int cost[1005][1005];bool vis[1005];int dis[1005];const int INF = 100000000;int N, T;int min(int x, int y){return x > y ? y : x;}void Dijkstra()                  //求最短路径{int i;for(i = 1; i <= N; i++){vis[i] = false;dis[i] = INF;}dis[N] = 0;while(true){int v = -1;for(i = 1; i <= N; i++)           //从没有选取的顶点中选一个距离最小的顶点{if(!vis[i] && (v == -1 || dis[i] < dis[v]))v = i;}if(v == -1)                      //全部选取完,退出break;vis[v] = true;for(i = 1; i <= N; i++)          //更新dis{dis[i] = min(dis[i], dis[v] + cost[v][i]);}}}int main(){int a, b, c;while(scanf("%d%d", &T, &N) != EOF){for(int j = 0; j <= N; j++)       //初始化cost数组{for(int k = 0; k <= N; k++){if(j != k)cost[j][k] = INF;elsecost[j][k] = 0;}}for(int i = 0; i < T; i++){scanf("%d%d%d", &a, &b, &c);if(cost[a][b] > c)                    //取最小长度cost[a][b] = cost[b][a] = c;}Dijkstra();printf("%d\n", dis[1]);}return 0;}



0 0
原创粉丝点击