Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1548953
  • 博文数量: 327
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3556
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-05 21:28
个人简介

东黑布衣,流浪幽燕。 真诚善良,值得信赖。

文章分类

全部博文(327)

我的朋友

分类: BSD

2016-03-08 20:20:06

Code Begin

  1. #include "stdafx.h"
  2. #include <stdio.h>

  3. #define LEN 210
  4. int max=99999999;
  5. int map[LEN][LEN];
  6. int dis[LEN];
  7. int mark[LEN];

  8. void Dijkstra(int n,int start)
  9. {
  10.     int i,j,min,pos;
  11.     for(i=1;i<=n;i++){
  12.         mark[i]=0;
  13.         dis[i]=map[start][i];
  14.     }

  15.     mark[start]=1;//标记
  16.     dis[start]=0;

  17.     for(i=1;i<=n;i++){
  18.         min=max;
  19.         for(j=1;j<=n;j++){
  20.             if(mark[j]==0 && dis[j]<min){
  21.                 min=dis[j];
  22.                 pos=j;//标记
  23.             }
  24.         }

  25.         if(min==max)//已经不能通了
  26.             break;

  27.         mark[pos]=1;
  28.         for(j=1;j<=n;j++){
  29.             if(mark[j]==0 && dis[j]>dis[pos]+map[pos][j]){
  30.                dis[j]=dis[pos]+map[pos][j];//这步跟prim算法有点不同
  31.             }
  32.         }
  33.     }
  34. }

  35. int _tmain(int argc, _TCHAR* argv[])
  36. {
  37.    int i,j,n,line;
  38.    int t1,t2,t3;
  39.    if(NULL==freopen("Dijkstrai.txt","r", stdin)){
  40.       printf("open file failed\n");
  41.       return -1;
  42.    }
  43.    freopen("Dijkstrao.txt","w",stdout);
  44.    setbuf(stdout,NULL);
  45.    scanf("%d %d",&n,&line);//顶点数和边数
  46.    for(i=0;i<LEN;i++){
  47.       for(j=0;j<LEN;j++){
  48.          if(i==j)
  49.             map[i][j]=0;
  50.          else
  51.             map[i][j]=max;
  52.       }
  53.    }
  54.    for(i=0;i<line;i++){
  55.       scanf("%d %d %d",&t1,&t2,&t3); //输入各边的权值
  56.       // 判断重边的 保存较小的值
  57.       if(map[t1][t2]>t3){
  58.           map[t1][t2]=t3;
  59.       }
  60.    }

  61.     Dijkstra(n,1);

  62.     printf("%d\n",dis[n]);
  63.     return 0;
  64. }

  65. /* in
  66. 5 7
  67. 1 2 10
  68. 1 4 30
  69. 1 5 100
  70. 2 3 50
  71. 3 5 10
  72. 4 3 20
  73. 4 5 60
  74. out
  75. 60
  76. */


Code End



阅读(1147) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~