poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)
畅通工程续,题目链接,点击这里,
畅通工程续
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 42205 Accepted Submission(s): 15620
Problem Description
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
Input
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(1<=N~200,1<=M~1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B小于N,A!=B,X(1~10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T小于N),分别代表起点和终点。
Output
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
Sample Input
3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2
Sample Output
2
-1
这个可以用弗洛伊德算法,也可以用迪杰斯特拉算法,很标准的模板题,注意的细节也有很多。听学长说,还可以用邻接表优化,但我不会优化,还要学。
以下是的迪杰斯特拉算法的代码。
#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
//#include<map>//地图 if continue
#include<math.h>
#include<string.h>
#define INF 0x3f3f3f
#define inf 10000000
using namespace std;
int map[205][205],dis[205];
int book[205];// 访问数组;
int main()
{int n,m,a,b,x,minm,u;while(~scanf("%d%d",&n,&m)){for(int i=0; i<n; i++)// 初始化矩阵;for(int j=0; j<n; j++){if(i==j)map[i][j]=0;elsemap[i][j]=INF;}for(int i=0; i<m; i++){scanf("%d%d%d",&a,&b,&x);if(x<map[a][b]){map[a][b]=x;// 无向图map[b][a]=x;}}scanf("%d%d",&a,&b);// a,b是要寻找的边;for(int i=0; i<n; i++)dis[i]=map[a][i];// 初始化距离数组为a点;memset(book,0,sizeof(book));book[a]=1;for(int i=0; i<n-1; i++)//迪杰斯特拉 核心;{minm=INF;for(int j=0; j<n; j++){if(book[j]==0&&dis[j]<minm){minm=dis[j];u=j;}}book[u]=1;//标记,不再访问;for(int v=0; v<n; v++)//松弛if(map[u][v]<INF)if(dis[v]>dis[u]+map[u][v])dis[v]=dis[u]+map[u][v];}printf("%d\n",dis[b]==INF?-1:dis[b]);}return 0;
}
另外补了一道和也差不多是模板题的迪杰斯特拉。
poj 1874 题目链接,畅通工程续。
AC代码:
#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
//#include<map>//地图 if continue
#include<math.h>
#include<string.h>
#define INF 0x3f3f3f
#define inf 10000000
using namespace std;
int map[205][205],dis[205],book[205];
int main()
{int n,m,a,b,x,minm,u;while(scanf("%d%d",&n,&m)&&n&&m){for(int i=0; i<n; i++)// 初始化矩阵;{for(int j=0; j<n; j++)map[i][j]=INF;map[i][i]=0;}while(m--){scanf("%d%d%d",&a,&b,&x);a--;b--;if(x<map[a][b]){map[a][b]=x;// 无向图map[b][a]=x;}}dis[0]=0;for(int i=0; i<n; i++)dis[i]=map[0][i];memset(book,0,sizeof(book));book[0]=1;for(int i=1; i<n; i++){minm=INF;for(int j=0; j<n; j++){if(!book[j]&&dis[j]<minm){minm=dis[j];u=j;}}book[u]=1;for(int v=0; v<n; v++)if(map[u][v]<INF)if(dis[v]>dis[u]+map[u][v]&&!book[v])dis[v]=dis[u]+map[u][v];}printf("%d\n",dis[n-1]==INF?-1:dis[n-1]);}return 0;
}
poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)相关推荐
- HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
- 杭电 hdu 1874 畅通工程续
第二次 /* THE PROGRAM IS MADE BY PYY */ /*------------------------------------------------------------- ...
- HDU 1874 畅通工程续 最短路
畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 某 ...
- HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...
- HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 1874 畅通工程续 Floyd
畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Time Limit: 3000/1000 MS (Java/Others) Memory L ...
- hdu 1874畅通工程续(基础Floyd)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 1874 畅通工程续
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
最新文章
- 机器学习组队【计划及安排】
- android notification 定时显示,Android编程使用Service实现Notification定时发送功能示例...
- 前端技术周刊 2019-02-26:前端代码保护
- Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】
- Python3--unitest框架的使用
- kaggle用命令提交
- 方立勋_30天掌握JavaWeb_jdbc实现客户关系管理(未完)
- elasticsearch 5.1 问题 ubuntu
- LeetCode 1426. 数元素(哈希set)
- 在Kubernetes上运行区块链服务(BaaS)
- 安装Mirantis OpenStack Fuel 9.0
- python连接mongodb的库文件pymongo
- php svn更改密码,svn 开启修改备注
- vue 实现数据滚动显示_vue 通过定时器轮询获取后台数据--滚动条显示在底部(展示最新的内容)...
- 老罗如果输了整个民族都输了
- Apache 安装详解
- Java api文档自动生成工具smartdoc+torna
- Nico的刷题日记(一)
- PostGIS教程十三:地理
- 软件评测师知识点7-11
热门文章
- Chrome出现错误代码:DNS_PROBE_FINISHED_NXDOMAIN
- MySQL数据文件介绍及存放位置(*)
- matlab电动汽车路径优化——考虑中途充电
- Universal link 原理
- 罗马数字 与 阿拉伯数字 互转工具类
- 散户投资者如何成为“七亏二平一赚”中的一赚?
- 服务器自动重启的原因及解决方法
- Typora 瘦身 + 标题编号 + 图片同步
- 再次配置iterm2+zsh替代terminal
- UseAuthentication和UseAuthorization