转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
刚好yobobobo最近做BFS,我也被渲染了,当是复习一下,也总结一下吧,大部分是HDOJ上的BFS题目,由于本人时间有限,会持续更新
HDU 1548 http://acm.hdu.edu.cn/showproblem.php?pid=1548
基础的BFS,每次有两个方向,分别把步数乘以1和-1就行了。其余的都是基础BFS,注意下起点终点重合的情况
HDU 1372http://acm.hdu.edu.cn/showproblem.php?pid=1372
经典的马步移动,基本的BFS改成8个方向,同样处理即可
HDU 2717 http://acm.hdu.edu.cn/showproblem.php?pid=2717
3种情况移动,+1,-1,*2,没啥好说的,同样处理就行了,同时注意下边界,比目标大的话就只能全部-1,如果比目标大了就没必要*2
HDU 3766 http://acm.hdu.edu.cn/showproblem.php?pid=3766
比较坑,开始以为和1372一样,其实不是,这题没有给出范围,但是范围很大,之前需要逼近下,然后再搜索,或者直接枚举判断下就行了
HDU 1026 http://acm.hdu.edu.cn/showproblem.php?pid=1026
其实做法一样,需要打怪耗时,需要用优先队列或者最小堆来处理下,不过这题比较纠结的是需要输出路径,首先注意细节问题,之前用的是next,保存后继结点,果断被坑,一个点在搜索的时候的后继结点会有好多,果断改成pre,前趋表示。
HDU 1072 http://acm.hdu.edu.cn/showproblem.php?pid=1072
题目总体思路很明确,遇到数字4的话,时间重置下,在判重的时候需要用三维数组,加一个当前时间,如果两次到某点剩余时间相同,那就没必要再走了。
HDU 1175 http://acm.hdu.edu.cn/showproblem.php?pid=1175
弱爆了,果断也被坑了,开始觉得只要保存某个结点的方向和已拐的弯,然后搜索就行了,其实只要沿某条直线先一直搜到底就行了,不过还是要保存方向和已拐的弯的个数。
HDU 1180 http://acm.hdu.edu.cn/showproblem.php?pid=1180
注意下楼梯部分的细节问题就行了,可以停在原地等待楼梯转向,这里比较坑啊,而且楼梯处不需要标记,可能两个方向都要走
HDU 1242 http://acm.hdu.edu.cn/showproblem.php?pid=1242
果断BFS+优先队列
HDU 1728 http://acm.hdu.edu.cn/showproblem.php?pid=1728
类似于连连看,限制了拐弯次数,只需要每个方向走到底就行了,题目输入有些坑,行列有点混乱应注意。而且如果之前搜过的点,之后不能停止而是跳过。
HDU 2579 http://acm.hdu.edu.cn/showproblem.php?pid=2579
由于 在K的倍数的时候石头会消失,所以不能像其它迷宫问题一样判重,可能当前时间石头还在,而走一圈再回来石头消失,也许就有其它的路径可以走,因此判断的时候要加上三维数组flag[x][y][time%k],如果到某点的时间取余都相同,那么此时的状态就是完全相同,没有意义的
HDU 2012 http://acm.hdu.edu.cn/showproblem.php?pid=2102
三维的BFS,注意一些细节就行了,譬如进入传送门就必须传送,而且另一边必须只有是空地才行,坑死了,读题不仔细
HDU 1253 http://acm.hdu.edu.cn/showproblem.php?pid=1253
三维BFS,木有问题,注意优化下
HDU 1240 http://acm.hdu.edu.cn/showproblem.php?pid=1240
三维BFS水之
HDU 1429 http://acm.hdu.edu.cn/showproblem.php?pid=1429
BFS+二进制压缩存储,很明显要保存你拿过的钥匙的状态,总共10把钥匙,使用二进制压缩才1024个状态,开始还打算把门的状态也保存下来,结果莫名其秒的TLE,后来发现只需要钥匙的状态,因为钥匙可以用很多次,但是又莫名其妙的MLE,好吧,不解释,彻底晕了flag[x][y][key],表示在(x,y)手上钥匙状态为key
HDU 1254 http://acm.hdu.edu.cn/showproblem.php?pid=1254
经典的推箱子游戏,注意判重需要一个三维数组,可用两次B FS解决,或者BFS+DFS
详情请移步 http://blog.csdn.net/acm_cxlove/article/details/7639306
HDU 2612 http://acm.hdu.edu.cn/showproblem.php?pid=2612
两个人到同一点的和最短,分别以两个人为起点,遍历整个图,计算出到每个KFC的最短距离,然后枚举所有的KFC,算最小的代价
HDU 1983 http://acm.hdu.edu.cn/showproblem.php?pid=1983
最差的情况直接把出口或者入口四个方向封住,所以最多只要堵4次。BFS找出最短的路径,并保存路径,DFS处理路径上的点,BFS判断是否连通。
HDU 1195 http://acm.hdu.edu.cn/showproblem.php?pid=1195
题目不难,1W个可能,判重很简单,就是转化有点纠结,至少我写得很矬
HDU 2128 http://acm.hdu.edu.cn/showproblem.php?pid=2128
坑爹的题目,不过题目很好,BFS和DFS都可以做
具体请见http://blog.csdn.net/acm_cxlove/article/details/7635497
贴代码:
HDU 1240 三维BFS
/*
ID:cxlove
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define LL unsigned long long
using namespace std;
int n,m,q;
int way[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
char str[15][15][15];
bool flag[15][15][15];
struct Node{
int x,y,z,step;
bool check(){
if(x>=0&&y>=0&&z>=0&&x<n&&y<n&&z<n)
return true;
return false;
}
}s,e,u,v;
int bfs(){
if(s.x==e.x&&s.y==e.y&&s.z==e.z)
return 0;
queue<Node>que;
memset(flag,false,sizeof(flag));
s.step=0;
que.push(s);
flag[s.x][s.y][s.z]=true;
while(!que.empty()){
u=que.front();
que.pop();
for(int i=0;i<6;i++){
v=u;
v.x+=way[i][0];
v.y+=way[i][1];
v.z+=way[i][2];
v.step++;
if(v.check()&&flag[v.x][v.y][v.z]==false){
flag[v.x][v.y][v.z]=true;
if(v.x==e.x&&v.y==e.y&&v.z==e.z)
return v.step;
if(str[v.x][v.y][v.z]=='X')
continue;
que.push(v);
}
}
}
return -1;
}
char ch[100];
int main(){
while(scanf("%s%d",ch,&n)!=EOF){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%s",str[i][j]);
while(scanf("%s",ch)){
if(strcmp(ch,"END")==0)
break;
sscanf(ch,"%d",&s.x);
scanf("%d%d%d%d%d",&s.y,&s.z,&e.x,&e.y,&e.z);
int ans=bfs();
if(ans==-1)
printf("NO ROUTE\n");
else
printf("%d %d\n",n,ans);
}
}
return 0;
}
HDU 1728 限制拐弯次数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define LL unsigned long long
using namespace std;
int n,m,k;
int way[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char str[105][105];
bool flag[105][105];
struct Node{
int x,y,dir,cnt;
bool check(){
if(x>=0&&x<n&&y>=0&&y<m)
return true;
return false;
}
}s,e,u,v;
int bfs(){
queue<Node>que;
que.push(s);
memset(flag,false,sizeof(flag));
flag[s.x][s.y]=true;
while(!que.empty()){
u=que.front();
que.pop();
for(int i=0;i<4;i++){
v.cnt=u.cnt;
if(u.dir!=-1&&u.dir!=i)
v.cnt++;
if(v.cnt>k)
continue;
v.dir=i;
for(int j=1;;j++){
v.x=u.x+way[i][0]*j;
v.y=u.y+way[i][1]*j;
if(v.check()&&str[v.x][v.y]!='*'){
if(flag[v.x][v.y])
continue;
flag[v.x][v.y]=true;
if(v.x==e.x&&v.y==e.y)
return true;
que.push(v);
}
else
break;
}
}
}
return false;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",str[i]);
scanf("%d%d%d%d%d",&k,&s.y,&s.x,&e.y,&e.x);
s.x--;s.y--;e.x--;e.y--;
s.cnt=0;s.dir=-1;
if((s.x==e.x&&s.y==e.y)||bfs())
printf("yes\n");
else
printf("no\n");
}
return 0;
}
HDU 1242 BFS+优先队列
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define LL long long
using namespace std;
struct Node{
int x,y,step;
bool operator<(const Node &n1)const{
return step>n1.step;
}
}s,e,u,v;
int n,m;
char str[205][205];
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int bfs(){
priority_queue<Node>que;
bool flag[205][205];
memset(flag,0,sizeof(flag));
s.step=0;
que.push(s);
flag[s.x][s.y]=1;
while(!que.empty()){
u=que.top();
que.pop();
for(int i=0;i<4;i++){
v.x=u.x+way[i][0];
v.y=u.y+way[i][1];
if(v.x>=0&&v.y>=0&&v.x<n&&v.y<m&&flag[v.x][v.y]==0&&str[v.x][v.y]!='#'){
flag[v.x][v.y]=1;
if(str[v.x][v.y]=='x')
v.step=u.step+2;
else
v.step=u.step+1;
if(v.x==e.x&&v.y==e.y)
return v.step;
que.push(v);
}
}
}
return -1;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=0;i<n;i++){
scanf("%s",str[i]);
for(int j=0;j<m;j++)
if(str[i][j]=='a'){
s.x=i;
s.y=j;
}
else if(str[i][j]=='r'){
e.x=i;
e.y=j;
}
}
int ans=bfs();
if(ans==-1)
printf("Poor ANGEL has to stay in the prison all his life.\n");
else
printf("%d\n",ans);
}
return 0;
}
HDU 1429 BFS+二进制压缩
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#define LL unsigned long long
using namespace std;
int n,m,T;
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
char str[21][21];
bool flag[21][21][1024];
struct Node{
short x,y,step;
short key;
bool check(){
if(x>=0&&x<n&&y>=0&&y<m)
return true;
return false;
}
}s,e,u,v;
queue<Node>que;
int bfs(){
if(!que.empty())
que.pop();
que.push(s);
memset(flag,false,sizeof(flag));
while(!que.empty()){
u=que.front();
que.pop();
for(int i=0;i<4;i++){
v=u;
v.step++;
v.x+=way[i][0];
v.y+=way[i][1];
if(v.step>=T)
break;
if(v.check()&&str[v.x][v.y]!='*'){
if(str[v.x][v.y]=='^')
return v.step;
if(str[v.x][v.y]>='A'&&str[v.x][v.y]<='J'){
if(((1<<(str[v.x][v.y]-'A'))&v.key)&&flag[v.x][v.y][v.key]==false){
que.push(v);
flag[v.x][v.y][v.key]=true;
}
}
else if(str[v.x][v.y]>='a'&&str[v.x][v.y]<='j'){
v.key|=(1<<(str[v.x][v.y]-'a'));
if(flag[v.x][v.y][v.key]==false){
que.push(v);
flag[v.x][v.y][v.key]=true;
}
}
else{ //相当于空地
if(!flag[v.x][v.y][v.key]){
flag[v.x][v.y][v.key]=true;
que.push(v);
}
}
}
}
}
return -1;
}
int main(){
while(scanf("%d%d%d",&n,&m,&T)!=EOF){
for(int i=0;i<n;i++){
scanf("%s",str[i]);
for(int j=0;j<m;j++){
if(str[i][j]=='@'){
s.x=i;
s.y=j;
s.step=0;
s.key=0;
}
}
}
printf("%d\n",bfs());
}
return 0;
}
分享到:
相关推荐
对于每个子目录,函数会再次调用自身,将子目录作为新的源目录,目标目录相应地更新。对于文件,直接进行复制操作。 2. **深度遍历**: 深度遍历(Depth-First Search, DFS)是一种优先处理当前节点的策略,通常...
### 数据结构课程总结 在本篇文章中,我们将深入探讨数据结构这一核心计算机科学领域的关键概念。数据结构是计算机科学中的一个重要分支,它...在未来的学习和实践中,持续深化对这些概念的理解并灵活运用将大有裨益。
#### 二叉树的最大最小结点数 - 对于深度为k的二叉树: - 最多拥有2^k-1个结点(满二叉树情况) - 最少拥有k个结点(一条链的情况) #### 二叉树的遍历 - 二叉树的遍历方式包括先序遍历、中序遍历、后序遍历等。 ...
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
ACM动态规划模板-区间修改线段树问题模板
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
本项目为Python语言开发的PersonRelationKnowledgeGraph设计源码,总计包含49个文件,涵盖19个.pyc字节码文件、12个.py源代码文件、8个.txt文本文件、3个.xml配置文件、3个.png图片文件、2个.md标记文件、1个.iml项目配置文件、1个.cfg配置文件。该源码库旨在构建一个用于表示和查询人物关系的知识图谱系统。
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
rtsp实时预览接口URL:/evo-apigw/admin/API/MTS/Video/StartVideo HLS、FLV、RTMP实时预览接口方式 :接口URL/evo-apigw/admin/API/video/stream/realtime 参数名 必选 类型 说明 data true string Json串 +channelId true string 视频通道编码 +streamType true string 码流类型:1=主码流, 2=辅码流,3=辅码流2 +type true string 协议类型:hls,hlss,flv,flvs,ws_flv,wss_flv,rtmp hls:http协议,m3u8格式,端口7086; hlss:https协议,m3u8格式,端口是7096; flv:http协议,flv格式,端口7886; flvs:https协议,flv格式,端口是7896; ws_flv:ws协议,flv格式,端口是7886; wss_flv:wss协议,flv格式,端口是7896; rtmp:rtmp协议,端口是1975;
Simulink永磁风机飞轮储能系统二次调频技术研究:频率特性分析与参数优化,Simulink永磁风机飞轮储能二次调频技术:系统频率特性详解及参数优化研究参考详实文献及两区域系统应用,simulink永磁风机飞轮储能二次调频,系统频率特性如下,可改变调频参数改善频率。 参考文献详细,两区域系统二次调频。 ,核心关键词: 1. Simulink 2. 永磁风机 3. 飞轮储能 4. 二次调频 5. 系统频率特性 6. 调频参数 7. 改善频率 8. 参考文献 9. 两区域系统 以上关键词用分号(;)分隔,结果为:Simulink;永磁风机;飞轮储能;二次调频;系统频率特性;调频参数;改善频率;参考文献;两区域系统。,基于Simulink的永磁风机与飞轮储能系统二次调频研究:频率特性及调频参数优化
MATLAB驱动的ASR防滑转模型:PID与对照控制算法对比,冰雪路面条件下滑移率与车速轮速对照展示,MATLAB驱动的ASR防滑转模型:PID与对照控制算法对比,冰雪路面条件下滑移率与车速轮速对照图展示,MATLAB驱动防滑转模型ASR模型 ASR模型驱动防滑转模型 ?牵引力控制系统模型 选择PID控制算法以及对照控制算法,共两种控制算法,可进行选择。 选择冰路面以及雪路面,共两种路面条件,可进行选择。 控制目标为滑移率0.2,出图显示车速以及轮速对照,出图显示车辆轮胎滑移率。 模型简单,仅供参考。 ,MATLAB; ASR模型; 防滑转模型; 牵引力控制系统模型; PID控制算法; 对照控制算法; 冰路面; 雪路面; 控制目标; 滑移率; 车速; 轮速。,MATLAB驱动的ASR模型:PID与对照算法在冰雪路面的滑移率控制研究
芯片失效分析方法介绍 -深入解析芯片故障原因及预防措施.pptx
4131_127989170.html
内容概要:本文提供了一个全面的PostgreSQL自动化部署解决方案,涵盖智能环境适应、多平台支持、内存与性能优化以及安全性加强等重要方面。首先介绍了脚本的功能及其调用方法,随后详细阐述了操作系统和依赖软件包的准备过程、配置项的自动生成机制,还包括对实例的安全性和监控功能的强化措施。部署指南给出了具体的命令操作指导,便于新手理解和执行。最后强调了该工具对于不同硬件条件和服务需求的有效应对能力,特别是针对云计算环境下应用的支持特点。 适合人群:对PostgreSQL集群运维有一定基础并渴望提高效率和安全性的数据库管理员及工程师。 使用场景及目标:本脚本能够帮助企业在大规模部署时减少人工介入时间,确保系统的稳定性与高性能,适用于各类需要稳定可靠的数据库解决方案的企业或机构,特别是在大数据量和高并发事务处理场合。 其他说明:文中还提及了一些高级功能如自动备份、流复制等设置步骤,使得该方案不仅可以快速上线而且能满足后续维护和发展阶段的要求。同时提到的技术性能数据也为用户评估其能否满足业务需求提供了直观参考。
房地产开发合同[示范文本].doc
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!