pku 2387

 2009年7月24日

题目链接:PKU 2387 Til the Cows Come Home

分类:简单最短路

题目分析与算法原型
         这道题也是一道较简单的最短路径问题,不过这题目有重边(看了讨论才知道),意思是说输入的路径中,存在一些起点和终点都相同但长度却不同的 路径,这个时候只要保存最小的长度作为权值即可,其他没什么,Dijkastra就行了

Code:

 1
#include<stdio.h>
 2#include<string.h>
 3#define len 1005
 4#define max 0x7fffffff
 5
 6int t,n,i,j,map[len][len],dis[len],flag[len],u;
 7
 8void dij(int v0)
 9{
10    for(i=1;i<=n;i++)dis[i]=map[v0][i];
11    flag[v0]=1;
12    for(i=1;i<n;i++)
13    {
14        int min=max;
15        for(j=1;j<=n;j++)
16            if(flag[j]==0&&dis[j]<min)
17            {
18                u=j;
19                min=dis[j];
20            }

21        if(min==max)return;
22
23        flag[u]=1;
24        for(j=1;j<=n;j++)
25            if(flag[j]==0&&map[u][j]<max&&dis[u]+map[u][j]<dis[j])
26                dis[j]=dis[u]+map[u][j];
27    }

28
29}

30
31void init()
32{
33    for(i=1;i<=n;i++)
34        for(j=1;j<=n;j++)
35        {
36            if(i==j)map[i][j]=0;
37            else map[i][j]=max;
38        }

39}

40
41int main()
42{
43    while(scanf("%d%d",&t,&n)!=EOF)
44    {
45        int a,b,l;
46        init();
47        memset(flag,0,sizeof(flag));
48        for(i=0;i<t;i++)
49        {
50            scanf("%d%d%d",&a,&b,&l);
51            if(l<map[a][b])
52            {
53                map[a][b]=l;
54                map[b][a]=l;
55            }

56        }

57        dij(n);
58        printf("%d\n",dis[1]);
59    }

60    return 0;
61}

62

posted on 2009-07-24 20:12 蜗牛也Coding 阅读(251) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(8)

随笔档案(78)

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜