码迷,mamicode.com
首页 > 编程语言 > 详细

最短路径---dijkstra算法模板

时间:2019-01-25 15:12:01      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:ble   col   can   include   class   efi   show   for   scanf   

dijkstra算法模板

http://acm.hdu.edu.cn/showproblem.php?pid=1874

技术分享图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<stdlib.h>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<string>
10 #include<set>
11 #include<cctype>
12 #include<sstream>
13 #define mem(a) memset(a,0,sizeof(a))
14 #define LL long long
15 #define inf 0x3f3f3f3f
16 using namespace std;
17 const int N=1e3+5;
18 int mp[N][N],dis[N],mark[N];
19 int n,m;
20 int dijkstra(int s,int t)
21 {
22    for(int i=0;i<n;i++)
23    dis[i]=(i==s?0:mp[s][i]);
24    mark[s]=1;
25    //dis[s]=0;
26    int v;
27    for(int i=1;i<n;i++)
28    {
29       int mx=inf;
30       for(int j=0;j<n;j++)
31         if(dis[j]<mx&&!mark[j])
32           mx=dis[v=j]; //%%%
33       if(mx==inf) break;
34       mark[v]=1;
35       for(int j=0;j<n;j++)
36       {
37           if(!mark[j]&&(dis[j]>dis[v]+mp[v][j]))
38             dis[j]=dis[v]+mp[v][j];
39       }
40    }
41    if(dis[t]>=inf) return -1;
42    return dis[t];
43 }
44 int main()
45 {
46  while(~scanf("%d%d",&n,&m)&&(n+m))
47  {
48      for(int i=0;i<n;i++)
49      {
50        for(int j=0;j<n;j++)
51        {
52            if(i==j)mp[i][j]=0;
53            else mp[i][j]=inf;
54        }
55      }
56      mem(mark);
57      int l,r,x;
58      for(int i=1;i<=m;i++)
59      {
60          scanf("%d%d%d",&l,&r,&x);
61          if(mp[l][r]>x) mp[l][r]=mp[r][l]=x;
62      }
63      int s,t;
64      scanf("%d%d",&s,&t);
65 
66      printf("%d\n",dijkstra(s,t));
67  }
68  return 0;
69 }
View Code

 

最短路径---dijkstra算法模板

标签:ble   col   can   include   class   efi   show   for   scanf   

原文地址:https://www.cnblogs.com/XXrll/p/10319289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!