在做PAT的甲1003,思考DFS和图什么的,时间紧张直接去看柳神(日后上传柳神的C++版本)的订阅,得知是dijkstra,转去用hdoj 1874练手,写了两天,终于调出来了

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

题目大意:给你点 和 边的数目,接下来输出边的信息(a, b, c表示a和b之间距离为c),最后给你两个数字,表示两点的点信息。让你输出最短路径,没有就-1.

解题思路:dijkstra的思想是贪心,越想越经典。

起始动作就是从出发点开始,把其余所有点到出发点的最近距离存储下,

接下来的动作就是逐渐辐射,

方法是:存储:找到距离出发点最近的点记录下来(从存储的所有点中遍历),这个点就是出发点到这个点的最近距离,

  批量处理:下一次把这个点作为过渡,如果 起点到这个点+这个点到其他某点的距离 < 起点直接到其他某点的距离,就把 起点直接到某点的距离更新为通过过度得到的距离,相当于把所有的更新存储的一下。

再接着执行,直到没有新的点可以加入作为过度为止(注意:每次得出的过度点是上一次得到的,然后上一次得到过度点就是起始点到过度点的最近距离)->(这段话我是脑子里有个这幅图B站女老师(主要学习思路))

上段思路我是理解了,可以写出,可以看懂

那么接下来说一下原理,和怎么想到的

上图:

用到的资料:直接看柳神题解得知是dijkstra,用到的学习资料,B站女老师(主要学习思路),CSDN(主要看看代码思路)

看着不错的界面但是没去看的资料:博客园,CSDN1,CSDN2,CSDN3

dijkstra基础题陈列:https://www.cnblogs.com/ACMan/archive/2012/07/23/2605673.html

动态演示:我反应慢,思维也慢,没跟上https://www.cnblogs.com/ly199553/p/5547808.html

卿学姐代码风格:https://www.bilibili.com/video/av4224493/?spm_id_from=333.788.videocard.3

容易WA的地方

1.重边的处理
2.起点与终点相同的情况

参考:http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=36571&messageid=1&deep=0

代码:

  1 /***************************************
  2 * About:    hdoj 1874(Dijkstra)
  3 * Author:   GerJCS
  4 * B log:
  5 From: 19/2/27
  6 ***************************************/
  7
  8 /*
  9
 10 思路
 11 */
 12
 13 //#include<bits/stdc++.h>
 14 #include<cstdio>
 15 #include<cstring>
 16 using namespace std;
 17 #define INF 999999
 18 int e[250][250];
 19 int visit[1050];
 20 int dis[250];
 21 int m, n;
 22 int a, b, c;
 23 int start, end;
 24 void init1()
 25 {
 26     for(int i = 0; i < m; i ++)
 27         for(int j = 0; j < m; j ++){
 28             if(i == j)
 29                 e[i][j] = 0;
 30             else{
 31                 e[i][j] = INF;
 32                 e[j][i] = INF;
 33             }
 34         }
 35 }
 36 void init2()
 37 {
 38     for(int i = 0; i < m; i ++)
 39         visit[i] = 0;
 40     visit[start] = 1;
 41     for(int i = 0; i < m; i ++)
 42         dis[i] = e[start][i];
 43 }
 44 //int dijkstra()
 45 void dijkstra()
 46 {
 47     int u = -1;
 48     int min;
 49     for(int i = 0; i < m - 1; i ++)
 50     {
 51         min = INF;
 52         for(int j = 0; j < m; j ++)
 53         {
 54             if(!visit[j] && min > dis[j])
 55             {
 56                 min = dis[j];
 57                 u = j;
 58             }
 59         }
 60 //        if(u == -1)
 61 //            return -1;
 62 //        if(u == end)
 63 //            return dis[u];
 64         visit[u] = 1;
 65         for(int k = 0; k < m; k ++)
 66             if(!visit[k] && dis[k] > dis[u] + e[u][k])
 67                 dis[k] = dis[u] + e[u][k];
 68     }
 69 //    return -1;
 70 }
 71 int main()
 72 {
 73 //    freopen("C:/Users/GerJCS岛/Desktop/ddd.txt","r",stdin);
 74 //    freopen("C:/Users/GerJCS岛/Desktop/out2.txt","w",stdout);
 75     while(scanf("%d%d", &m, &n) != EOF)
 76     {
 77         memset(e, 0, sizeof(e));
 78         memset(visit, 0, sizeof(visit));
 79         memset(dis, 0, sizeof(dis));
 80         init1();
 81         for(int i = 0; i < n; i ++)
 82         {
 83             scanf("%d%d%d", &a, &b, &c);
 84 //            e[a][b] = c;
 85 //            e[b][a] = c;
 86             if(c < e[a][b]){
 87                 e[a][b] = c;
 88                 e[b][a] = c;
 89             }
 90         }
 91
 92         scanf("%d%d", &start, &end);
 93         init2();
 94         dijkstra();
 95 //        printf("%d\n", dijkstra());
 96         if(dis[end] == INF)
 97             printf("-1\n");
 98         else
 99             printf("%d\n", dis[end]);
100     }
101 }
102
103
104
105 //3 4
106 //0 1 1
107 //0 2 1
108 //1 2 1
109 //0 2 9
110 //0 2

------------------------------------------------------------------------------待更新!-----------------------------------------------------------------------------

工具:http://tool.chinaz.com/Tools/textencrypt.aspx

密码:139*****136

加密后文字:

U2FsdGVkX19wgyNcTGQ7XiAr3GegDzjioUFtqCDiTpEjH3U8PCn0MGej0sbXbpmJ
/ek4/l8Di9oGOAFRHkQNZM4aRC474gAVDVi2L4FYs4rLjuxbYGh4ZydVxcVBXQPc
muey88tUTJJ0JpIUI7BR3teM9rtWec4JEWB/1H2khm6j+T+mm2qv+DpUcjZCWpoG
tRgFhQEnHfORwj95LI98+zPWjTC4ggmDYr21JleIbFaZ6CmbsiX/XtxkOAUZrz6q
8xwj+BRUyCxwjl0aR+98SgtY/HRw1B1hFMYk/Lm5Q41Fk+EXSsFvHI9UI3l4HNZe
g/LcjheiRBV3N5o4AH9qnLJIFhO0zFzzk9x0bM5/svtUEJVXpRqNjimx+vtuBSCi
d6oJbvI3dqVx7b7ukUOe0X6r0cAa5OFbbtR9+qNSBMiT6GKDb0riT8YP9c2PcOv4
phEJ83vWJtfTAf+g+upsGZtM3dT/yTRMdYwyVxkWvtoRl53PYm6/xOvgAuUOKWAF
thfH+nE3SHskAC/hOIVFue7R8bmFI8Ld/vG04bTTwmgM1rh+BwDEpCDuaExlUFI/
oanl8bCb66gMP/20XhHUzUZv6JsF6HmQPBfIw4ikcYboCk4lTLlu3oQYi7qy1hSs
km9uuBYFBc3ygaxjW//zTWYW5HOKPCp05p/q+/wYvEYC1OyChrocHpqhD7dB4FSR
oPWUvTvNS5ym4QsXnzzXLZ9CoYAic8iWWKMM/CPC5BOaolwdvlGM9zLDdoTqxqJ5
JiYndAf47DMXOxVUle9VvKv1MvL7Xk5qajPHVn9p5mHkdQicb0W64JLGA3DeZIQ/
f8i/KiKFwJxIs2qxjfj9DuF/P8kSbIJmE+ayJ5Yiml38bY6d+KDsQf0wNsc527Fr
vKouoogXgmINlHuly5Zy+iob6y8DbFzOgP2u9kow87zCEgSntpr9BGhP6wNyp5xp
LVkkfz5rXKrAJMIFCmJhMht8E//LYQmdJkTUsUqbF3MZc40HfQPE4LUfdRUBNTkj
O8hE6hLDNXQgXgO26Mf441T2FRKQYPH/3DYYlnRgly57kwBOu2wjpKC6WsE4JJWJ
683mzF/dTZxaNE+c6uAdbNvKUiETr4dlWXktIUWZO+Zo2SHVGvd9/lR0x354Wf/B
/YxZwv8mJxAI4qCSQVHwZEQlSRAHTpuqPxqZPd2dpB9YiB5+uEw6li4MEgESYsVk
YQJvbEDHBTH6R9RitJ79GBWOpPDs5HbBK5B1BWSgbLdRxvnWeV/DV9dnnA6smEDw
qBP2tmfTg/qTvaHYKj3xQkqGV3xFteiET1NRGlt+zhxc0axf3lMfdxecLlAy6zEU
Nv4MKTufILpY0dp1iy/uQLTkRLj8uCoEbK1e+CDNSNPS39rZwhfJjTol5CracvHs
RMDONEfHbEyxyoBmDgJUXjnUALTncc+4trIigiWOX0F/bz5lFU7Y/MCftzo+xpvV
9ChBNReSnry9/+m0UXEh124X362L+dqCb5iK+Nx1LE2iIKFs7GmT2m9u3pLFu1YR
On9UFXZiN15zsCgzU4+X2dLvc1CSlrOZAt2AUpgjdZ/4iDJqom3CDoBQNr0/I9Vt
7fUqnlXliPbe51uyJqX8fsbd27ty5vnG8mrdz+m6/mc=

人权!资本!圈子!平台!

转载于:https://www.cnblogs.com/gerjcs/p/10455983.html

hdoj 1874 dijkstra相关推荐

  1. HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:          http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...

  2. HDOJ 2544(Dijkstra)

    最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  3. hdu 1874 Dijkstra算法模板

    单源最短路径 迪杰斯特拉算法 1.初始化地图,map[i][j]记录城镇 i,j之间最短的道路长度, 若无道路连通 ,则为极大值 2.从起始城镇开始,用广度优先搜索思想,嵌入松弛处理算法, 用dis[ ...

  4. [转]最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现

    最短路径算法-Dijkstra(迪杰斯特拉)算法分析与实现(C/C++) Dijkstra算法 ----------- 最后更新时间:2011.9.25 ----------- Dijkstra(迪杰 ...

  5. HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

    畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...

  6. hdu 1874(Dijkstra + Floyd)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  7. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...

  8. 知识点四 图论:dijkstra (HDU 2544 +HDU 1874)

    dijkstra(狄克斯特拉)知识点 1.可以用于解决最短路问题 2.dijkstra算法在数据量比较小的情况下可以直接开邻接矩阵. 3.不能处理含有负权环的图 对dijkstra算法的理解 dijk ...

  9. HDOJ 2112 HDU Today (最短路 Dijkstra SPFA)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. 特征工程(五)length
  2. 关于adb devices连不上手机的几种情况
  3. python使用符号 表示单行注释-Python编程规范之注释
  4. asp.net应用程序_如何在ASP.NET中为聊天应用程序构建键入指示器
  5. 【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
  6. 状态空间模型中实际参数估计
  7. Python入门学习笔记(4)
  8. Thread+Handler 线程 消息循环(转载)
  9. 超级简单C语言进制转换代码
  10. oracle vm virtualbox安装xp,如何在VirtualBox虚拟机中安装XP系统?
  11. Adobe全系列软件介绍
  12. java可视化工作流_强大的java工作流引擎,可视化开发工作流
  13. 清华领军计划计算机试题,清华大学2017自主招生真题
  14. 精密光学测量1-概论
  15. 安卓项目查手机电量功能_安卓手机也能像苹果一样!这一招教你如何查看手机电池损耗...
  16. 几种常用的权重初始化方法
  17. Gimy 剧迷更新快,内容超多的电影、美日韩剧、动漫片源
  18. 访问者模式 Visitor
  19. 普通素数 筛法求素数 二次筛法求素数 MillerRabin素数测试【模板】
  20. 网页marc数据采集器(国图marc数据批量下载)

热门文章

  1. 无需烦恼文字怎么转换成语音,仅需学会这三步
  2. ceph-deploy部署指定版本ceph集群
  3. 关于科大讯飞语音合成的开发(先写个本地的,简单)
  4. c# 添加图片水印,可以指定水印位置+生成缩略图
  5. C# Win10通知
  6. 华为轮值主席:公司管理核心就这三个流程LTC/IPD/ITR
  7. 新零售未来趋势,这些是街都对2020年的预测
  8. 大神带你理解堆的定义及用法
  9. 关于区块链技术的3大特点,你都了解吗?--甲由
  10. 苏州农业职业技术学院携手华为,打造校企合作新典范