hdu1874最短路
裸裸的最短路问题,将while(scanf("%d%d", &N, &M)!=EOF)粗心写为while(scanf("%d%d", &N, &M),我还奇怪怎么一直是超时,OMG.
首先用Dijstra算法,寻找两点间最短路径长度,算法复杂度是O(n^2).
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
using namespace std;
#define MAX_SIZE 202
#define MAX_NUMBER INT_MAX/2
int dis[MAX_SIZE];
bool visit[MAX_SIZE];
int G[MAX_SIZE][MAX_SIZE];
int N, M;
void Dijstra(int s,int t);
int main() {
int i, j,k,w,s,t;
while (scanf("%d%d", &N, &M)!=EOF) {
for (i = 0; i < N; i++) {
G[i][i] = 0;
for (j = i + 1; j < N; j++)
G[i][j] = G[j][i] = MAX_NUMBER;
}
for (k = 0; k < M; k++) {
scanf("%d%d%d", &i, &j, &w);
if(w<G[i][j])
G[i][j] = G[j][i] = w;
}
scanf("%d%d", &s, &t);
Dijstra(s,t);
if (dis[t] != MAX_NUMBER)
printf("%d\n", dis[t]);
else
printf("-1\n");
}
return 0;
}
void Dijstra(int s,int t) {
int i, j, k,pos,lmin;
for (i = 0; i < N; i++) {
visit[i] = 0;
dis[i] = MAX_NUMBER;
}
j = s;
dis[j] = 0;
visit[j] = 1;
for (i = 0; i < N; i++) {
for (k = 0; k <N; k++) {
if (!visit[k] && dis[k]>dis[j] + G[k][j])
dis[k] = dis[j] + G[k][j];
}
pos =s; lmin = MAX_NUMBER;
for (k =0; k <N; k++) {
if (!visit[k] && lmin > dis[k]) {
pos = k;
lmin = dis[k];
}
}
j = pos;
if (j ==s||j==t)
return;
visit[j] = 1;
}
}
接着使用Floyd算法也可以解决,时间复杂度是O(n^3),当然在这里是多此一举,不需要求出任意两点间最短距离。
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
using namespace std;
#define MAX_SIZE 202
#define MAX_NUMBER INT_MAX/2
int dis[MAX_SIZE][MAX_SIZE];
int G[MAX_SIZE][MAX_SIZE];
int N, M;
void Floyd();
int main() {
int i, j, k, w, s, t;
while (scanf("%d%d", &N, &M) != EOF) {
for (i = 0; i < N; i++) {
G[i][i] = 0;
for (j = i + 1; j < N; j++)
G[i][j] = G[j][i] = MAX_NUMBER;
}
for (k = 0; k < M; k++) {
scanf("%d%d%d", &i, &j, &w);
if (w<G[i][j])
G[i][j] = G[j][i] = w;
}
scanf("%d%d", &s, &t);
Floyd();
if (dis[s][t] != MAX_NUMBER)
printf("%d\n", dis[s][t]);
else
printf("-1\n");
}
return 0;
}
void Floyd() {
int i, j, k;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
dis[i][j] = G[i][j];
for (k = 0; k < N; k++)
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
if (dis[i][j]>dis[i][k] + dis[k][j])
dis[i][j] = dis[i][k] + dis[k][j];
}
hdu1874最短路的更多相关文章
- HDU1874 最短路 SPFA
最短路 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 24 Solved: 17 [Submit][Status][Web Board] Descr ...
- hdu1874 最短路模板题
之所以做了第二道模板题还要写是因为发现了一些自己的问题 用的是dij 最简单的松弛 需要注意的地方是松弛的时候 判断dis[i]<dis[w]+tance[w][i]时 还要再判断 vis[i] ...
- hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...
- hdu1874 (spfa 最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 很简单的最短路问题,刚刚学习spfa,其实很简单,思想和一维动态规划差不多,数组d[i]表示起点 ...
- 最短路(Bellman)-Hdu1874畅通工程序
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城 ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
- Sicily 1031: Campus (最短路)
这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...
- 最短路(Floyd)
关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...
随机推荐
- 68、TSPL指令集(标签打印机)
0.开发者pdf.sdk等资料详见: http://download.csdn.net/detail/kunyashaw/9376694 1.测试代码 包含文字打印.条形码打印.二维码打印 packa ...
- 如何使用 JSX 构建 Gutenberg 块
本教程将介绍使用 JSX 构建自定义块所需的步骤. 由于浏览器不支持 JSX 和 ES6,因此我们需要将代码编译后才能在浏览器中运行. 我们不需要手动编译代码,因为有些工具可以为我们自动执行此过程. ...
- c++ 吕凤翥 第五章 类对象一
一 类的声明和实现 1. class tdate //声明部分 { public: void setdate(int y,int m,int d); int isleapyear(); voi ...
- python 冒泡排序,快排
一.冒泡排序 1.1.冒泡的原理 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的 ...
- IO Streams:来源于命令行的IO
简介 程序经常从命令行运行并与在命令行环境中的用户交互.Java平台支持这种互动的方式有两种:通过标准流,通过控制台 标准流 标准流是许多操作系统的一项功能.默认情况下,他们从键盘输入读取和输出到显示 ...
- alpha(4/10)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺4 团队部分 后敬甲 过去两天完成了哪些任务 文字描述 主页部分图标的替换 -拍照按钮的设计和测试 GitHub代码 ...
- IE IE8 iframe的onload方法分析 IE浏览器onload事件失效
判断iframe是否加载完成的完美方法 IE 支持 iframe 的 onload 事件,不过是隐形的,需要通过 attachEvent 来注册. 第二种方法比第一种方法更完美(采用readystat ...
- jQuery ajax使用$(this).parent()无效解决方法
div=$(this).parent(); //先获取父级元素 div.remove(); //再删除 $(".delStu").click(function () { ...
- ruby linux连接windows执行dos命令
在整个开发流程中,gitlab-runner-ci是搭建在linux下.web自动化是在windows下面进行的. 如果ci构建完版本.部署完后,需要触发启动自动化执行. 那么我们需要在部署完后在li ...
- ruby 规整git commit 信息
实现过程: 1.使用git log 可以获取到所有git commit.对命令加入参数后,可以获取某段时间的log.和只输出log的某些字段.如: [root@localhost crowd-web- ...