题目: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 ;
}

hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)的更多相关文章

  1. HDU 1874 畅通工程续(初涉dijkstra算法实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...

  2. hdu 1874 畅通工程续(模板题 spfa floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 #include<iostream> #include<stdio ...

  3. HDU 1874 畅通工程续(模板题——Floyd算法)

    题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰 ...

  4. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  5. HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题

    参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上:  迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...

  6. hdu 1874 畅通工程续

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...

  7. HDU 1874畅通工程续(迪杰斯特拉算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)     ...

  8. hdu 1874 畅通工程续 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...

  9. HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)

    题目链接: 传送门 畅通工程续 Time Limit: 1000MS     Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...

随机推荐

  1. SpringCloud之搭建配置中心

    一.搭建config-server 1.引入pom <dependencies> <dependency> <groupId>org.springframework ...

  2. zuul(springboot)设置静态资源代理和默认首页代码一例

    直接上代码: public class StaticResourcesConfig extends WebMvcConfigurerAdapter { private static final Log ...

  3. weblogic服务目录迁移记录

    weblogic服务,由于前期的规划不好,导致后期有点问题!为了更加规范运行服务及执行相关操作,故进行服务迁移... 先决条件:weblogic都是单个aminserver运行的,单个服务 问题解决: ...

  4. 【原创+亲测可用】JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器

    1.原理: 通过不同移动端的ua弹窗 获取user-agent 参数包含的信息,进行判断浏览器类型 在Android上 QQ内置环境的ua中有关键字 MQQBrowser, 并且后面包含一个[空白符+ ...

  5. Linux-内核态与用户态

    内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序 用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺 ...

  6. JSP、Servlet中的相对路径和绝对路径 页面跳转问题

    转自:http://blog.csdn.net/wym19830218/article/details/5503533/ 1.JSP.Servlet中的相对路径和绝对路径 前提:假设你的Http地址为 ...

  7. [转]NLP Tasks

    Natural Language Processing Tasks and Selected References I've been working on several natural langu ...

  8. numpy文件读写的三对函数

    在Python很多库中,使用文件名的地方都可以使用文件对象来替代. 在下述三种方法中,都是如此. 一.a.tofile()和np.fromfile() numpy中的ndarray对象有一个函数tof ...

  9. 【LeetCode】173. Binary Search Tree Iterator (2 solutions)

    Binary Search Tree Iterator Implement an iterator over a binary search tree (BST). Your iterator wil ...

  10. javascript 中 split 函数分割字符串成数组

    分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...