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

/************************************************************************/
/*
hdu 畅通工程续
dijkstra求起始点到目标点最短距离
题目大意:求这些村子中从起始位置到目标点的最短距离
解题思路:dijkstra算法,求图中两个点的最短距离,
      dijkstra算法不同于prim算法,prim算法是求虽小生成树,
      不断地把点最近的点加入到集合中;而dijkstra算法是求源点到目标点的最短距离。
*/
/************************************************************************/ #include <stdio.h>
#include <string.h>
#include <algorithm> #define MAX 0xfffffff
const int N = ; int dj[N],map[N][N],vis[N];
int n,m,x,y,len,i,j; void DJ(int start,int end)
{
int min,k;
int t = n;
int cur = start; for(i=;i<n;dj[i++]=MAX);
dj[start] = ;
while()
{
min = MAX;
vis[cur] = ;
for(i = ; i < n; i++)
{
if(vis[i]==)continue;
if(dj[i] > map[i][cur] + dj[cur])//////////
dj[i] = map[i][cur] + dj[cur];
if(min>dj[i])
{
min = dj[i];
k = i;
}
}
cur = k;
if(cur == end)break;
if(min == MAX)break;
}
printf("%d\n",dj[end]<MAX?dj[end]:-);
} int main()
{
while(scanf("%d%d",&n,&m)!= EOF)
{
memset(vis,,sizeof(vis));
for (i = ; i < n; i++)
for (j = ; j < n; j++)
{
map[i][j] = (i==j?:MAX);
}
for (i = ; i <= m; i++)
{
scanf("%d%d%d",&x,&y,&len);
map[x][y] = map[y][x] = (map[x][y]<len?map[x][y]:len);
}
scanf("%d%d",&x,&y);
DJ(x,y);
}
return ;
}
/************************************************************************/
/*
hdu 畅通工程续
floyd 求起始点到目标点最短距离
题目大意:求这些村子中从起始位置到目标点的最短距离
解题思路:floyd 算法,求图中两个点的最短距离
floyd算法就是在整个图中扫描,看点 i 到 j 的距离和
(点 i 到点 k 的距离)+(点 k 到点 j 的距离)两者哪个较小,
把小的存入map[i][j]中即可。
*/
/************************************************************************/ #include <stdio.h>
#include <string.h>
#include <algorithm> #define MIN(a,b) a<b?a:b
#define MAX 0xfffffff
const int N = ; int map[N][N];
int n,m,x,y,len,i,j; void floyd(int start,int end)
{
int k;
for (k = ; k < n; k++)
{
for (i = ; i < n; i++)
for (j = ; j < n; j++)
map[i][j] = MIN(map[i][j],map[i][k]+map[k][j]);
}
printf("%d\n",map[start][end]<MAX?map[start][end]:-);
} int main()
{
while(scanf("%d%d",&n,&m)!= EOF)
{
for (i = ; i < n; i++)
for (j = ; j < n; j++)
{
map[i][j] = (i==j?:MAX);
}
for (i = ; i <= m; i++)
{
scanf("%d%d%d",&x,&y,&len);
map[x][y] = map[y][x] = (map[x][y]<len?map[x][y]:len);
}
scanf("%d%d",&x,&y);
floyd(x,y);
}
return ;
}

最新文章

  1. iOS 如何在整个屏幕中都能实现滑动返回的效果
  2. SVM基本思想和对偶推导笔记-记录毕业论文1
  3. [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
  4. [Sql Server2008]树结构的递归算法
  5. Python脚本控制的WebDriver 常用操作 &lt;一&gt; 启动浏览器
  6. Java中的Stringbuffer类解析
  7. JavaScript-学习一获取表单的值
  8. 研究 UIActivityViewController
  9. J2EE 项目本地发布路径及修改
  10. B2B、B2C、B2D的简单理解
  11. 前端开发APP,从HBuilder开始~ 【转】
  12. 算法工程师&lt;机器学习基础&gt;
  13. Kubernetes-基于flannel的集群网络
  14. Python列表操作集合
  15. PAT L2-020 功夫传人
  16. python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
  17. [PHP] 算法-二叉树的子结构判断的PHP实现
  18. Centos7安装WPS和截图工具shutter
  19. MQTT协议学习研究 &amp; Mosquitto简要教程(安装和使用)
  20. Laravel 5 如何对部份 URI 禁用 CSRF 验证

热门文章

  1. Java 安装和变量环境配置
  2. VSTS 免费代码git/tfs托管体验-使用代码云托管
  3. 给X240换上了三键触摸板
  4. 解决打开bootstrap模态框抖动问题
  5. Git提交代码报错Git push error:src refspec XXX matches more than one解决方案
  6. ID3D11DeviceContext::DrawIndexed DrawIndexed 参数详解 StartIndexLocation BaseVertexLocation
  7. js触摸事件
  8. 【Hibernate】数据Session对象的常规操作收集
  9. 【Oracle】详解ORACLE中的trigger(触发器)
  10. HTML CSS边框阴影的实现