裸裸的最短路问题,将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最短路的更多相关文章

  1. HDU1874 最短路 SPFA

    最短路 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 24  Solved: 17 [Submit][Status][Web Board] Descr ...

  2. hdu1874 最短路模板题

    之所以做了第二道模板题还要写是因为发现了一些自己的问题 用的是dij 最简单的松弛 需要注意的地方是松弛的时候 判断dis[i]<dis[w]+tance[w][i]时 还要再判断 vis[i] ...

  3. hdu1874 畅通project续 最短路 floyd或dijkstra或spfa

    Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...

  4. hdu1874 (spfa 最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 很简单的最短路问题,刚刚学习spfa,其实很简单,思想和一维动态规划差不多,数组d[i]表示起点 ...

  5. 最短路(Bellman)-Hdu1874畅通工程序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城 ...

  6. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  7. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

  8. Sicily 1031: Campus (最短路)

    这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...

  9. 最短路(Floyd)

    关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...

随机推荐

  1. MongoDB快速入门学习笔记7 MongoDB的用户管理操作

    1.修改启动MongoDB时要求用户验证加参数 --auth 即可.现在我们把MongoDB服务删除,再重新添加服务 mongod --dbpath "D:\work\MongoDB\dat ...

  2. python2.X中文乱码

    在IDE下,加上# -- coding: UTF-8 -- 并且保证IDE也是utf-8编码. 在CMD下,这样执行会有乱码,为啥呢,因为cmd下是gbk编码的,你写的代码必须也是gbk编码的,你可以 ...

  3. Monkey log异常分析说明

    以下主要针对在Android-Phone项目中进行Monkey log进行分析和说明,可以对bug提交作为参考. 要求熟悉,应用的包名.也就是说那个应用包出现问题,该属于那个模块,应用包名是判断依据. ...

  4. 踩坑 PHP Fatal Error Failed opening required File

    使用 require 引用文件时,报错如下: require 'https://dev.ryan.com/test.php'; [Sat Mar 19 23:10:50 2011] [warn] mo ...

  5. Leetcode 556.下一个更大元素III

    下一个更大元素III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 12 输出: ...

  6. sed处理大txt文件(1G) 比如替换某一串字符串,或者删除一行

    1.将11.sql文件中"prompt"替换为"--prompt",然后保存为111.sql文件 sed -e "s,prompt,--prompt, ...

  7. LINUX 常用指令学习

    目录 0 查找find 1 别名alias 2 变量的设置 3 常用的系统变量 4 通配符及组合按键 5 指令之间的分隔符(;&||) 6 输出重定向(>,>>,1>, ...

  8. Zookeeper CreateMode

    通过CreateMode 可以设置在zookeeper中创建节点的类型,节点类型共有4种: EPHEMERAL:临时节点 EPHEMERAL_SEQUENTIAL:有序的临时节点 PERSISTENT ...

  9. win8中写好的程序,在win7中没办法运行

     没有安装相应版本的,net framework win8自带4.0 win7自带2.0 所以4.0及其以上的程序在win7跑必须安装4.0及其以上版本的framework

  10. wcf获取最新版本之后自己的东西没了

    大概意思,点击显示所有文件,然后在那些文件上右击 包括在项目中就行了 图呢.......我当时添加进来的图呢