Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
 
Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
 
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
 
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0

 
Sample Output
3
2

 
 
 
思路:这题是最短路模板题,我这里用dfs暴力搜以及三种算法Floyd,Dijkstra,Bellman-ford都写了一遍,可以看看......
 
 
dfs暴力搜索
 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 using namespace std;
10 #define ll long long
11 #define dd cout<<endl
12 const int inf=99999999;
13 const int mod=1e9+7;
14 const int maxn=505;
15 const int maxm=1e4+7;
16 int n,m;
17 int x,y,z;
18 int e[maxn][maxn];
19 int book[maxn]={0};
20 int minn=inf;
21 void init()
22 {
23     for(int i=0;i<maxn;i++)
24         for(int j=0;j<maxn;j++)
25             i==j?e[i][j]=0:e[i][j]=inf;
26 }
27 void dfs(int cur,int dis)
28 {
29     if(dis>minn)
30         return ;
31     if(cur==n)
32     {
33         if(dis<minn)
34             minn=dis;
35         return ;
36     }
37     for(int i=1;i<=n;i++)
38     {
39         if(book[i]==0&&e[cur][i]!=inf)
40         {
41             book[i]=1;
42             dfs(i,dis+e[cur][i]);
43             book[i]=0;
44         }
45     }
46     return ;
47 }
48 int main()
49 {
50     while(cin>>n>>m)
51     {
52         if(!n&&!m)
53             return 0;
54         init();
55         memset(book,0,sizeof(book));
56         for(int i=0;i<m;i++)
57         {
58             scanf("%d%d%d",&x,&y,&z);
59             e[x][y]=z;
60             e[y][x]=z;
61         }
62         book[1]=1;
63         minn=inf;
64         dfs(1,0);
65         printf("%d\n",minn);
66     }
67     return 0;
68 }

View Code

Floyd

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstdio>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 using namespace std;
10 #define ll long long
11 const int inf=99999999;
12 const int maxn=10002;
13 int n,m;
14 int x,y,z;
15 int e[maxn][maxn];
16 int dis[maxn];
17 int book[maxn];
18 void init()
19 {
20     for(int i=1;i<=n;i++)
21         for(int j=1;j<=n;j++)
22             i==j?e[i][j]=0:e[i][j]=inf;
23 }
24 int main()
25 {
26     while(scanf("%d%d",&n,&m)!=EOF)
27     {
28         if(!n&&!m)
29             return 0;
30         init();
31         for(int i=1;i<=m;i++)
32         {
33             scanf("%d%d%d",&x,&y,&z);
34             e[x][y]=z;
35             e[y][x]=z;
36         }
37         for(int i=1;i<=n;i++)
38             dis[i]=e[1][i];
39         for(int k=1;k<=n;k++)
40         {
41             for(int i=1;i<=n;i++)
42             {
43                 for(int j=1;j<=n;j++)
44                 {
45                     if(e[i][j]>e[i][k]+e[k][j])
46                         e[i][j]=e[i][k]+e[k][j];
47                 }
48             }
49         }
50         printf("%d\n",e[1][n]);
51     }
52     return 0;
53 }

View Code

Dijkstra

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstdio>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 using namespace std;
10 #define ll long long
11 const int inf=99999999;
12 const int maxn=10002;
13 int n,m;
14 int x,y,z;
15 int e[maxn][maxn];
16 int dis[maxn];
17 int book[maxn];
18 void init()
19 {
20     for(int i=1;i<=n;i++)
21         for(int j=1;j<=n;j++)
22             i==j?e[i][j]=0:e[i][j]=inf;
23 }
24 int main()
25 {
26     while(scanf("%d%d",&n,&m)!=EOF)
27     {
28         if(!n&&!m)
29             return 0;
30         init();
31         for(int i=1;i<=m;i++)
32         {
33             scanf("%d%d%d",&x,&y,&z);
34             e[x][y]=z;
35             e[y][x]=z;
36         }
37         for(int i=1;i<=n;i++)
38             dis[i]=e[1][i];
39         book[1]=1;
40         for(int k=1;k<=n-1;k++)
41         {
42             int minn=inf,temp;
43
44             for(int i=1;i<=n;i++)
45             {
46                 if(book[i]==0&&dis[i]<minn)
47                     minn=dis[temp=i];
48             }
49             book[temp]=1;
50             for(int j=1;j<=n;j++)
51             {
52                 if(book[j]==0&&e[temp][j]<inf)
53                 {
54                     if(dis[j]>dis[temp]+e[temp][j])
55                         dis[j]=dis[temp]+e[temp][j];
56                 }
57             }
58         }
59         printf("%d\n",dis[n]);
60         memset(book,0,sizeof(book));
61     }
62     return 0;
63 }

View Code

Bellman-ford

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstdio>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 using namespace std;
10 #define ll long long
11 const int inf=99999999;
12 const int maxn=10002;
13 int n,m;
14 int x,y,z;
15 int e[maxn][maxn];
16 int dis[maxn];
17 int u[maxn];
18 int v[maxn];
19 int w[maxn];
20 int book[maxn];
21 void init()
22 {
23     for(int i=1;i<=n;i++)
24         for(int j=1;j<=n;j++)
25             i==j?e[i][j]=0:e[i][j]=inf;
26 }
27 int main()
28 {
29     while(scanf("%d%d",&n,&m)!=EOF)
30     {
31         if(!n&&!m)
32             return 0;
33         init();
34         for(int i=1;i<=m;i++)
35         {
36             scanf("%d%d%d",&x,&y,&z);
37             e[x][y]=z;
38             e[y][x]=z;
39             u[i]=x;
40             v[i]=y;
41             w[i]=z;
42         }
43         for(int i=m+1;i<=2*m;i++)
44         {
45             u[i]=v[i-m];
46             v[i]=u[i-m];
47             w[i]=w[i-m];
48         }
49         for(int i=1;i<=n;i++)
50             i==1?dis[i]=0:dis[i]=inf;
51         for(int k=1;k<=n-1;k++)
52         {
53             for(int i=1;i<=2*m;i++)
54             {
55                 if(dis[v[i]]>dis[u[i]]+w[i])
56                     dis[v[i]]=dis[u[i]]+w[i];
57             }
58         }
59         printf("%d\n",dis[n]);
60     }
61     return 0;
62 }

View Code

转载于:https://www.cnblogs.com/xwl3109377858/p/10663018.html

hdu 2544 最短路相关推荐

  1. hdu 2544 最短路 (dijkstra)

    http://acm.hdu.edu.cn/showproblem.php?pid=2544 最简单的最短路了吧 改天试试优化版本的 #include<stdio.h> #include& ...

  2. HDU 2544 最短路(各种最短路算法的实现)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目: Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂 ...

  3. hdu 2544最短路(Dijkstra)

    最短路                    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  4. hdu 2544最短路 Floyd算法

    最短路 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Problem Descrip ...

  5. hdu 2544 最短路 Dijkstra算法

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...

  6. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. HDU 2544 最短路 最短路入门

    点击打开链接 最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. HDU 2544 最短路(最短路入门)

    链接:click here 题意: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找 ...

  9. 知识点四 图论:dijkstra (HDU 2544 +HDU 1874)

    dijkstra(狄克斯特拉)知识点 1.可以用于解决最短路问题 2.dijkstra算法在数据量比较小的情况下可以直接开邻接矩阵. 3.不能处理含有负权环的图 对dijkstra算法的理解 dijk ...

最新文章

  1. 初次使用VS附加到进程功能
  2. *ctf 逆向math题解
  3. containers文件夹可以删除吗_电脑进行C盘清理,appdata文件夹可以删除吗?
  4. oracle 如何查看日志?
  5. Sigmoid函数与Softmax函数的区别与联系
  6. 断供后,英特尔再宣布暂停在俄罗斯业务,立即生效
  7. 问题三十七:C++怎么解一元四次方程?(2)——怎么解一元三次方程
  8. 30多套API接口,还怕满足不了你的量化交易需求?
  9. 从官网通过execl制作省市区行政代码
  10. 使用OpenOffice实现Word转Html
  11. 数理逻辑蕴含_(1)逻辑学(形式逻辑/数理逻辑): 基本概念
  12. Oracle 10.2 流复制问题(二)—— C001: large txn detected
  13. matplotlib-06 axhline绘制水平/竖直参考线
  14. 支付宝支付对接DEMO
  15. PVE(Proxmox VE) 显卡直通
  16. ns3—— sixth.cc 大概理解
  17. Python中比较好用的PDF模块——发票金额提取
  18. VC++6.0安装(解决win10,win11无法打开)
  19. 独家下载,阿里云云原生携 10+ 技术专家带来《云原生与云未来的新可能》
  20. 磁盘损坏怎么恢复文件?看完就懂了

热门文章

  1. linux6个服务级别,RHEL 6 和 RHEL 7 的一些有关运行级别,服务管理,服务启动等方面的区别介绍...
  2. mysql 引擎 校对,MySQL 字符集和校对
  3. html页面通过特殊链接:打电话,发短信,发邮件详细教程
  4. CString转char的方法总结
  5. oracle存储过程写法(一)
  6. [react] 使用webpack打包React项目,怎么减小生成的js大小?
  7. React开发(230):ant design table固定表头
  8. [html] HTML5中新添加的表单属性有哪些?
  9. [css] 会引起Reflow和Repaint的操作有哪些?
  10. [js] 如何判断两个对象相等?