最短路

Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
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前面用了Dijkstra算法做了这个题,下面再用Floyd算法做一下。我认为Floyd算法比Dijkstra简单,实现起来也比较容易,就是时间复杂度有点高,为n^3. Floyd算法另外的优点就是不必n次调用Dijkstra,还可以解决有负权(即边为负)的问题。下面是主要代码,一定要记住。
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
if(d[j][k]>d[j][i]+d[i][k])
d[j][k]=d[j][i]+d[i][k];
AC代码:
#include<stdio.h>
#include<string.h>
#define inf 999999
int main()
{int d[105],len[105][105],vis[105];int i,j,k,a,b,c,n,m;while(scanf("%d%d",&n,&m)&&m!=0&&n!=0){for(i=1;i<=n;i++)for(j=1;j<=n;j++)len[i][j]=len[j][i]=inf; //初始任意两点的距离为inffor(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&c);len[a][b]=c;len[b][a]=c; //a->b和b->a的距离都为c}for(i=2;i<=n;i++)d[i]=len[1][i]; //d[i]表示从1到i点要走的距离memset(vis,0,sizeof(vis)); //初始化刚开始都未访问过vis[1]=1;  //从1开始查找 int min;k=1;for(i=1;i<n;i++){min=inf;for(j=1;j<=n;j++){if(d[j]<min&&(!vis[j]))   //如果j点未访问,且1到j的距离比min小{min=d[j];  k=j;}}vis[k]=1;  //从到1距离最短的点查找for(j=1;j<=n;j++){if(!vis[j]&&d[j]>d[k]+len[k][j])//增加新的结点d[j]=d[k]+len[k][j];}}printf("%d\n",d[n]);}return 0;
}

#include<stdio.h>
#define INF 1<<25
const int N = 120;
int d[N][N];void read_graph(int n, int m)
{int u, v, w, i, j;for(i = 1; i <= n; i++)for(j = 1; j <= n; j++){if(i == j)d[i][j] = 0;elsed[i][j] = INF;}for(i = 0; i < m; i++){scanf("%d%d%d",&u, &v, &w);d[u][v] = d[v][u] = w;}
}void Floyd(int n)
{for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(d[i][k] < INF && d[k][j] < INF)if(d[i][j] > d[i][k] + d[k][j])d[i][j] = d[i][k] + d[k][j];
}int main()
{int n, m;while(~scanf("%d%d",&n,&m)){if(n == 0 && m == 0) break;read_graph(n, m);Floyd(n);printf("%d\n",d[1][n]);}return 0;
}

hdu 2544最短路 Floyd算法相关推荐

  1. hdu 2544 最短路 Dijkstra算法

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

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

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

  3. 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数

    链接:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17 来源:牛客网 最短路径 热度指数:2992 ...

  4. 图论 —— 最短路 —— Floyd 算法

    [概述] Floyd 算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法. 其最大特点是可以计算出现负边权时的最短路,实际应用中,很多题目不是问如何用 Floyd 求最短路,而是用 ...

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

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

  6. 最短路——floyd算法

    1. Floyd算法的介绍 算法的特点: 弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包.Fl ...

  7. 任意两点最短路floyd算法matlab,多源最短路——Floyd算法

    Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...

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

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

  9. hdu 2544 最短路 (dijkstra)

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

最新文章

  1. c++ primer,友元函数上的一个例子(By Sybase)
  2. 由c#的值类型与引用类型说开去
  3. minijson使用_java layuimini使用json传值
  4. 学成在线--19.新增课程(数据字典)
  5. Linux下安装配置Nexus
  6. Linux应用程序和驱动程序如何完成交互,应用程序和驱动的简易交互方式的实现...
  7. 将图片变换成3d对象
  8. SeDebugPrivilege
  9. 基于SpringBoot的图书管理系统
  10. Python使用Hprose
  11. 【2021LaTeX模板分享】数学建模竞赛国赛
  12. 浅析数据中心存储发展趋势
  13. 月入2万的10个小生意项目
  14. 杀戮间插件入坑指南(UT2004)
  15. 微信小程序+.NET(十一) 小程序之小说阅读器实现
  16. Tech.ED North America 2008 Launch! (June 10-13,2008)
  17. 解决VM虚拟机导致硬盘灯常亮,很卡的问题 解决VM虚拟机导致硬盘灯常亮,很卡的问题
  18. matlab中输入数学字母,Matlab希腊字母和数学符号
  19. ACM-ICPC 2018沈阳赛区网络预选赛
  20. [SSD固态硬盘技术 7] 主控核心设计

热门文章

  1. HTML-语义类标签
  2. Javascript代码优化的8个知识点
  3. hbase集群部署与测试(2017)
  4. ARM linux内核启动时几个关键地址【转】
  5. tomcat https 配置
  6. C# WinForm开发系列 - WebBrowser
  7. Optiver Career Fair
  8. MARSHALL LIBRARY OPENING HOURS
  9. UNITY 画布的粗浅理解
  10. WPF无边框拖动、全屏、缩放