在做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

代码:

 /***************************************
* About: hdoj 1874(Dijkstra)
* Author: GerJCS
* B log:
From: 19/2/27
***************************************/ /* 思路
*/ //#include<bits/stdc++.h>
#include<cstdio>
#include<cstring>
using namespace std;
#define INF 999999
int e[][];
int visit[];
int dis[];
int m, n;
int a, b, c;
int start, end;
void init1()
{
for(int i = ; i < m; i ++)
for(int j = ; j < m; j ++){
if(i == j)
e[i][j] = ;
else{
e[i][j] = INF;
e[j][i] = INF;
}
}
}
void init2()
{
for(int i = ; i < m; i ++)
visit[i] = ;
visit[start] = ;
for(int i = ; i < m; i ++)
dis[i] = e[start][i];
}
//int dijkstra()
void dijkstra()
{
int u = -;
int min;
for(int i = ; i < m - ; i ++)
{
min = INF;
for(int j = ; j < m; j ++)
{
if(!visit[j] && min > dis[j])
{
min = dis[j];
u = j;
}
}
// if(u == -1)
// return -1;
// if(u == end)
// return dis[u];
visit[u] = ;
for(int k = ; k < m; k ++)
if(!visit[k] && dis[k] > dis[u] + e[u][k])
dis[k] = dis[u] + e[u][k];
}
// return -1;
}
int main()
{
// freopen("C:/Users/GerJCS岛/Desktop/ddd.txt","r",stdin);
// freopen("C:/Users/GerJCS岛/Desktop/out2.txt","w",stdout);
while(scanf("%d%d", &m, &n) != EOF)
{
memset(e, , sizeof(e));
memset(visit, , sizeof(visit));
memset(dis, , sizeof(dis));
init1();
for(int i = ; i < n; i ++)
{
scanf("%d%d%d", &a, &b, &c);
// e[a][b] = c;
// e[b][a] = c;
if(c < e[a][b]){
e[a][b] = c;
e[b][a] = c;
}
} scanf("%d%d", &start, &end);
init2();
dijkstra();
// printf("%d\n", dijkstra());
if(dis[end] == INF)
printf("-1\n");
else
printf("%d\n", dis[end]);
}
} //3 4
//0 1 1
//0 2 1
//1 2 1
//0 2 9
//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=

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

hdoj 1874 dijkstra的更多相关文章

  1. hdoj 1874 畅通工程续(单源最短路+dijkstra)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 思路分析:该问题给定一个无向图.起始点和终点,要求求出从起始点到终点的最短距离: 使用Dijks ...

  2. hdoj 1874 畅通工程续【dijkstra算法or spfa算法】

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. hdu 1874 Dijkstra算法

    先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...

  4. hdoj 1874 畅通工程续

    Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行 ...

  5. HDOJ 1874

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. HDOJ 2680 Dijkstra

    题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路.... 解题思路: 1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1 ...

  7. hdu 1874 dijkstra 队列实现 比数组高效特别在稀疏图

    参考  http://blog.csdn.net/zhuyingqingfen/article/details/6370561 刘汝佳白皮书 #include<stdio.h> #incl ...

  8. hdoj 1874 畅通project续【SPFA】

    畅通project续 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Su ...

  9. HDOJ 1874 畅通project续

    畅通project续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. 通达OA任意用户登录 漏洞复现

    0x00 漏洞简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...

  2. JavaWeb后端jsp之增删改查

    今日主题:JavaWeb后端jsp之增删改查 实体类: Student.java: package cn.itcast.model.entity; public class Student { pri ...

  3. 使用JAVA API编程实现简易Habse操作

    使用JAVA API编程实现下面内容: 1.创建<王者荣耀>游戏玩家信息表gamer,包含列族personalInfo(个人信息).recordInfo(战绩信息).assetsInfo( ...

  4. 2019-2020-1 20199308《Linux内核原理与分析》第三周作业

    <Linux内核分析> 第二章 操作系统是如何工作的 2.1 函数调用堆栈 3个关键性的方法机制(3个法宝) 存储程序计算机 函数调用堆栈机制 中断 堆栈相关的寄存器 ESP:堆栈指针(s ...

  5. docker commit理解构建镜像(7)

    镜像是多层存储,每一层是在前一层的基础上进行的修改: 而容器同样也是多层存储是在以镜像为基础层,在基础层上加一层作为容器运行时的存储层. 当我们使用Docker Hub的镜像无法满足我们的需求时,我们 ...

  6. java并发中的Synchronized关键词

    文章目录 为什么要同步 Synchronized关键词 Synchronized Instance Methods Synchronized Static Methods Synchronized B ...

  7. 单源最短路问题--朴素Dijkstra & 堆优化Dijkstra

    许久没有写博客,更新一下~ Dijkstra两种典型写法 1. 朴素Dijkstra     时间复杂度O(N^2)       适用:稠密图(点较少,分布密集) #include <cstdi ...

  8. Android Studio SVN配置忽略文件

    1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,和SVN没有关系. 2.打开Setting-Version Co ...

  9. CSS常用遮罩层

    为什么80%的码农都做不了架构师?>>>   CSS常用遮罩层 应用场景: 上传了一张图片,鼠标移入到图片上的时候显示遮罩层,并且提示点击删除. 通过改变遮罩层的透明度来实现显示隐藏 ...

  10. 《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句

    本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.7节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.7 ...