POJ - 2387 Til the Cows Come Home (dijkstra模板题)

题目大意

这道题要我们求一群奶牛最短的回家的路,题目会给你n个点,m条边,然后给你每条边又哪两个点相连,并且其中的路程是多少。我们需要找到最短路径的总路程。

样例输入

5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100

样例输出

90

分析

坑点1:这边和点是倒着给的 , 你需要先输入边再输入点。
坑点2:他会给你重复的边,比如1和2之间的距离是100,然后又给你说1和2之间的距离是80。当然我们可以理解为1和2之间有两条路,但是我就因为这个wa了好多发。当然,我们构建邻接矩阵的时候需要选择最短的那条路。

剩下的就dijkstra一波带走。代码如下。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define CLR(x) memset(x,0,sizeof(x))
using namespace std;
const int INF = 100000;
const int maxp = 1100;
const int maxl = 1000000;
int edge[maxp][maxp];
int dist[maxp];
int vis[maxp];
int p,l;

int dijkstra(int x)       //磁少风格版
{
    for(int i = 1 ; i <= p ; i++)
        dist[i] = INF;
    int v = x;
    dist[v]=0;
    vis[v]=1;
    for(int i = 1 ; i <= p ; i++)
    {
        for(int j = 1; j <= p ; j++)
        {
            if(vis[j]!=1 && dist[v]+edge[v][j] < dist[j])
            {
                dist[j] = dist[v] + edge[v][j];
            }

        }
        int minn = INF;
        for(int j = 1 ; j <= p ; j++)
            if(vis[j]!=1 && dist[j] < minn)
            {
                minn=dist[j];
                v=j;
            }
        vis[v]=1;
    }
}

int main()
{
    while(scanf("%d%d",&l,&p)!= EOF)
    {
        for(int i = 0 ; i < maxp ; i++)
        {
            for(int j = 0 ; j < maxp ; j++)
            {
                edge[i][j] = INF;
            }
            edge[i][i] = 0;// 因为可能输入重复两条边的值我们需要选出同样的边最小的那一个值;
        }
        CLR(vis);
        for(int i = 1 ; i <= l ; i++)
        {
            int u,v,w;
            scanf("%d %d %d",&u,&v,&w);
            if(edge[u][v] > w)
            {
                edge[u][v] = edge[v][u] = w;
            }
        }
        dijkstra(1);
        printf("%d\n",dist[p]);
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [编程题]比较重量小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们...
    骇客与画家阅读 848评论 0 0
  • 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,...
    bbqub阅读 484评论 0 0
  • 树形动态规划,顾名思义就是树+DP,先分别回顾一下基本内容吧:动态规划:问题可以分解成若干相互联系的阶段,在每一个...
    Mr_chong阅读 1,505评论 0 2
  • 今天早上七点十几分的时候,走到宿舍门口,看到四个小师弟(看起来很像小师弟),其中有一个,腿受伤了,走路要身旁的同学...
    _八月阅读 207评论 0 0
  • 当朋友咨询我关于职业的选择时,通常我会分享给他们我的楼层理论。 我觉得职业选择就像爬楼,如果你今天在2楼,你的下一...
    让雇主倒追你阅读 312评论 0 1