裸裸的最短路问题,将while(scanf("%d%d", &N, &M)!=EOF)粗心写为while(scanf("%d%d", &N, &M),我还奇怪怎么一直是超时,OMG.

首先用Dijstra算法,寻找两点间最短路径长度,算法复杂度是O(n^2).

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. using namespace std;
  4. #define MAX_SIZE 202
  5. #define MAX_NUMBER INT_MAX/2
  6. int dis[MAX_SIZE];
  7. bool visit[MAX_SIZE];
  8. int G[MAX_SIZE][MAX_SIZE];
  9. int N, M;
  10. void Dijstra(int s,int t);
  11. int main() {
  12. int i, j,k,w,s,t;
  13. while (scanf("%d%d", &N, &M)!=EOF) {
  14. for (i = 0; i < N; i++) {
  15. G[i][i] = 0;
  16. for (j = i + 1; j < N; j++)
  17. G[i][j] = G[j][i] = MAX_NUMBER;
  18. }
  19. for (k = 0; k < M; k++) {
  20. scanf("%d%d%d", &i, &j, &w);
  21. if(w<G[i][j])
  22. G[i][j] = G[j][i] = w;
  23. }
  24. scanf("%d%d", &s, &t);
  25. Dijstra(s,t);
  26. if (dis[t] != MAX_NUMBER)
  27. printf("%d\n", dis[t]);
  28. else
  29. printf("-1\n");
  30. }
  31. return 0;
  32. }
  33. void Dijstra(int s,int t) {
  34. int i, j, k,pos,lmin;
  35. for (i = 0; i < N; i++) {
  36. visit[i] = 0;
  37. dis[i] = MAX_NUMBER;
  38. }
  39. j = s;
  40. dis[j] = 0;
  41. visit[j] = 1;
  42. for (i = 0; i < N; i++) {
  43. for (k = 0; k <N; k++) {
  44. if (!visit[k] && dis[k]>dis[j] + G[k][j])
  45. dis[k] = dis[j] + G[k][j];
  46. }
  47. pos =s; lmin = MAX_NUMBER;
  48. for (k =0; k <N; k++) {
  49. if (!visit[k] && lmin > dis[k]) {
  50. pos = k;
  51. lmin = dis[k];
  52. }
  53. }
  54. j = pos;
  55. if (j ==s||j==t)
  56. return;
  57. visit[j] = 1;
  58. }
  59. }

  接着使用Floyd算法也可以解决,时间复杂度是O(n^3),当然在这里是多此一举,不需要求出任意两点间最短距离。

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. using namespace std;
  4. #define MAX_SIZE 202
  5. #define MAX_NUMBER INT_MAX/2
  6. int dis[MAX_SIZE][MAX_SIZE];
  7. int G[MAX_SIZE][MAX_SIZE];
  8. int N, M;
  9. void Floyd();
  10. int main() {
  11. int i, j, k, w, s, t;
  12. while (scanf("%d%d", &N, &M) != EOF) {
  13. for (i = 0; i < N; i++) {
  14. G[i][i] = 0;
  15. for (j = i + 1; j < N; j++)
  16. G[i][j] = G[j][i] = MAX_NUMBER;
  17. }
  18. for (k = 0; k < M; k++) {
  19. scanf("%d%d%d", &i, &j, &w);
  20. if (w<G[i][j])
  21. G[i][j] = G[j][i] = w;
  22. }
  23. scanf("%d%d", &s, &t);
  24. Floyd();
  25. if (dis[s][t] != MAX_NUMBER)
  26. printf("%d\n", dis[s][t]);
  27. else
  28. printf("-1\n");
  29. }
  30. return 0;
  31. }
  32. void Floyd() {
  33. int i, j, k;
  34. for (i = 0; i < N; i++)
  35. for (j = 0; j < N; j++)
  36. dis[i][j] = G[i][j];
  37. for (k = 0; k < N; k++)
  38. for (i = 0; i < N; i++)
  39. for (j = 0; j < N; j++)
  40. if (dis[i][j]>dis[i][k] + dis[k][j])
  41. dis[i][j] = dis[i][k] + dis[k][j];
  42. }

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. leetcode 【 Unique Paths II 】 python 实现

    题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. H ...

  2. jmeter全局变量配置:将token运用到全局(跨线程组使用变量)

    请注意元器件的执行顺序: 请将提取token的配置原件放在设置全局变量的配置元器件前面(本来是一个超级马虎的人,真是俗称“方脑壳”啊) 1.获取登录后的token(提取可以用json path Ext ...

  3. c语言入门-01

    当我们学c语言我们学些什么. [1]编译机制 当我们写好c的代码,生产了程序,这中间到底做了些什么? 这个就是c语言的编译过程 我们分别来解析这上面的过程. 我们写出我们第一个c程序. #includ ...

  4. Python设计模式之一(单例模式)

    单例模式就是告诉你,只有一个对象 (1)单例模式不适用的场景 #单例模式就是告诉你,其实只有一个对象 class Person: def __init__(self,name,age): self.n ...

  5. python正则 转

    python中的正则表达式(re模块)   一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编 ...

  6. Ansible实战之Nginx高可用代理LNMP-wordpress

    author:JevonWei 版权声明:原创作品 blog:http://119.23.52.191/ --- 实验环境:前端使用Nginx做代理服务器,静态资源经由缓存服务器,连接后端web集群, ...

  7. Manthan, Codefest 16 B 数学

    B. A Trivial Problem time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. 使用state改变的jsx监听不到数据变化的问题

    当使用state来改变一个组件内部的虚拟dom的时候,该虚拟dom是无法监听到state数据的变化的,他只会绑定state改变dom当时的数据.

  9. 向量内积(bzoj 3243)

    Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: 现有 n 个d 维向量x1,...,xn ,小喵喵想知 ...

  10. 【TJOI2015】弦论 (后缀数组)

    前言: 多好的题啊! 我理论$O(nlog_2n)$的后缀数组还带个常数26,竟然跑的比$O(n)$的后缀自动机还快,全场 Rak 1? Description 为了提高智商,ZJY开始学习弦论.这一 ...