hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目: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)的更多相关文章
- HDU 1874 畅通工程续(初涉dijkstra算法实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...
- hdu 1874 畅通工程续(模板题 spfa floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 #include<iostream> #include<stdio ...
- HDU 1874 畅通工程续(模板题——Floyd算法)
题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰 ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- hdu 1874 畅通工程续
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...
- HDU 1874畅通工程续(迪杰斯特拉算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) ...
- hdu 1874 畅通工程续 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...
- HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)
题目链接: 传送门 畅通工程续 Time Limit: 1000MS Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...
随机推荐
- 江南白衣整理和开发的java常用工具类
江南白衣的公众号的介绍文章:http://mp.weixin.qq.com/s/6JUo1vmUa-7SuDH6yIxKeQ github的地址:https://github.com/springsi ...
- 常见pip方法
pip search 包名 查询 pip install 包名 安装包 pip show--files 包名 pip list --outdated 检查哪些包需要更新 pip insta ...
- python之模块 os
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块 os import os ''' FUNCTIONS abort(...)#暂不了解 a ...
- adb shell中的am pm命令
adb shell中的am pm命令,一些自己的见解和大多数官网的翻译. am命令 am全称activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止 ...
- codevs 2010 求后序遍历
时间限制: 1 s空间限制: 64000 KB题目描述 Description输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列.输入描述 Input Description共两行,第一行一个字符 ...
- Win10激活KMS2.0
目前,发现的唯一能激活Window10的纯净版. 下载地址: http://pan.baidu.com/s/1bpvMRBx 好孩子看不见: http://pan.baidu.com/s/1bo8xP ...
- 用命令行发邮件——让你更加了解smtp
本文演示用命令行发送邮件的过程. SMTP 首先介绍下smtp协议--简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输em ...
- ios中tableview侧栏的折叠
#import "ViewController.h" #define Ksmall 40.0f #define Klarge 80.0f #define KNoOpen @&quo ...
- lucene之中文分词及其高亮显示
参考:http://www.cnblogs.com/lirenzhujiu/p/5914174.html http://www.cnblogs.com/xing901022/p/3933675.htm ...
- cd及目录快速切换
一.cd ~ 切换到用户目录 二.cd - cd - 返回进入当前目录前所在目录 三.pushd.popd.dirs 在Linux的多目录命令提示符中工作是一种痛苦的事情,但以下这些利用lin ...