hdoj 1874 dijkstra
在做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的更多相关文章
- hdoj 1874 畅通工程续(单源最短路+dijkstra)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 思路分析:该问题给定一个无向图.起始点和终点,要求求出从起始点到终点的最短距离: 使用Dijks ...
- hdoj 1874 畅通工程续【dijkstra算法or spfa算法】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 Dijkstra算法
先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...
- hdoj 1874 畅通工程续
Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行 ...
- HDOJ 1874
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDOJ 2680 Dijkstra
题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路.... 解题思路: 1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1 ...
- hdu 1874 dijkstra 队列实现 比数组高效特别在稀疏图
参考 http://blog.csdn.net/zhuyingqingfen/article/details/6370561 刘汝佳白皮书 #include<stdio.h> #incl ...
- hdoj 1874 畅通project续【SPFA】
畅通project续 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ...
- HDOJ 1874 畅通project续
畅通project续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- 22-Java-Hibernate框架(二)
Hibernate的了解.Hibernate的搭建.Hibernate的基本使用流程等内容请阅读21-Java-Hibernate(一) 五.Hibernate的Query查询接口(重中之重) 1.H ...
- MySQL使用mysqldump+binlog完整恢复被删除的数据库
(一)概述 在日常的MySQL数据库运维过程中,可能会遇到用户误删除数据,常见的误删除数据操作有: 用户执行delete,因为条件不对,删除了不应该删除的数据(DML操作): 用户执行update,因 ...
- 【python】显示图片 并随意缩放图片大小 图片归一化
cv2.namedWindow("image_",0) cv2.imshow("image_",image)就可以随意缩放显示图片的窗口大小啦. ------ ...
- PHP open_basedir配置未包含upload_tmp_dir 导致服务器不能上传文件
在做一个上传图片的功能时候发现后台接收到的$_FILES['file']['error'] = 6,这个错误意思是找不到临时文件,或者是临时文件夹无权限,需要更改php.ini文件的 upload_t ...
- 15个有趣好玩的linux shell 命令
今天介绍一些有趣的linux shell命令,所有的命令都可以使用man + 命令名称 来查看完整的使用方法. 1,figlet 字符画 figlet 可以将英文字符串以字符画的形式输出: >& ...
- 使用3种协议搭建本地yum仓库
关闭防火墙和selinux [root@qls yum.repos.d]# systemctl stop firewalld (stop,start,disable,enable) [root@qls ...
- 【linux题目】第二关
1.创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写入内容”inet addr:10.0.0.8 Bcast:10.0.0.255 Ma ...
- 酷狗音乐快速转换MP3格式的方法
喜欢听音乐的朋友们,散步跑步的时候都是随身听,音乐可以给人带来力量,让人心情愉悦,有时候甚至还可以让我们忘记烦恼和忧愁,是一种不错的解压方式,所以热爱运动的宝宝们是离不来音乐的陪伴的,这样说来随身听的 ...
- Docker容器利用weave实现跨主机互联
Docker容器利用weave实现跨主机互联 环境: 实现目的:实现主机A中容器1与主机B中容器1的网络互联 主机A步骤: ①下载复制weave二进制执行文件(需要internet)[root@192 ...
- rabbitMQ消息队列原理
MQ:Message Queue,消息队列,是一种应用程序对应用程序的通信方法:应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 1 rabbitMQ入 ...