【BFS】Oliver的救援
Description
在你的帮助下,Oliver终于追到小X了,可有一天,坏人把小X抓走了。这正是Oliver英雄救美的时候。所以,Oliver又找到哆啦A梦,借了一个机器,机器显示出一幅方格地图,它告诉Oliver哪里能走,哪里不能走,。并且Oliver在这个地图的右下角,而小X在左上角。时间紧急,Oliver想知道,最少要走多少个格子,才能找到小X。(只能直走)。
Input
共N+1行,第一行为N,以下N行N列0-1矩阵,1表示不能通过,0表示可以通过(左上角和右下角为0). N<30.
Output
共一个数,为最少的走的格子数.
Sample Input
5
0 1 1 1 1
0 0 1 1 1
1 0 0 0 1
1 1 1 0 1
1 1 1 0 0
Sample Output
9
解题思路
板子广搜
正常程序
#include<iostream>
#include<cstdio>
using namespace std;
const int w[4][2]={{1,0},{0,-1},{-1,0},{0,1}};//方向
int a[2000][2000],s[2000][2000];//a是地图兼记录有没有走过,s是步数
int v[1001000][2],h,t=1;
int n,sx,sy,ex,ey;
bool check(int x,int y){return (x>0&&x<=n&&y>0&&y<=n);
}
void bfs(int x,int y){a[x][y]=s[x][y]=1;v[t][0]=x,v[t][1]=y;while(h++<t){for(int i=0;i<4;i++){int xx=v[h][0]+w[i][0],yy=v[h][1]+w[i][1];if(check(xx,yy)&&!a[xx][yy]){a[xx][yy]=1;s[xx][yy]=s[v[h][0]][v[h][1]]+1;v[++t][0]=xx,v[t][1]=yy;if(xx==1&&yy==1)return;}}}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);bfs(n,n); printf("%d",s[1][1]);
}
但是不知道为什么数据出错了,所以改成了这样
#include<iostream>
#include<cstdio>
using namespace std;
const int w[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
int a[2000][2000],s[2000][2000];
int v[1001000][2],h,t=1;
int n,sx,sy,ex,ey;
bool check(int x,int y){return (x>0&&x<=n&&y>0&&y<=n);
}
void bfs(int x,int y){a[x][y]=s[x][y]=1;v[t][0]=x,v[t][1]=y;while(h++<t){for(int i=0;i<4;i++){int xx=v[h][0]+w[i][0],yy=v[h][1]+w[i][1];if(check(xx,yy)&&!a[xx][yy]){a[xx][yy]=1;s[xx][yy]=s[v[h][0]][v[h][1]]+1;v[++t][0]=xx,v[t][1]=yy;if(xx==ex&&yy==ey)return;}}}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){char c;cin>>c;a[i][j]=c-48;}//输入莫得空格scanf("%d%d%d%d",&sx,&sy,&ex,&ey);//莫名数据多了起点和终点bfs(sx,sy); printf("%d",s[ex][ey]-1);
}
【BFS】Oliver的救援相关推荐
- 【SSL_P2278】 Oliver的救援
Oliver的救援 题目链接:Oliver的救援 题目描述 在你的帮助下,Oliver终于追到小X了,可有一天,坏人把小X抓走了.这正是Oliver英雄救美的时候.所以,Oliver又找到哆啦A梦,借 ...
- Oliver的救援pascal程序
这题有点像电子老鼠闯迷宫,也是用广搜来做的 我是用字符来输入的 const dx:array[1..4]of longint=(1,-1,0,0); dy:array[1..4]of longint= ...
- SSL P2325 最小转弯
题目:http://blog.csdn.net/qq_35786326/article/details/78836913 题意: 求在一个矩阵中的最短路径方案中的转弯次数. 分析: 原身:Oli ...
- 某新商盟登录,js逆向:★★
前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以留言发给我,一起学习共享学习路程 4.如侵权,联系我,删 勉强给个两星 网址信息 网址 ...
- C++ 算法篇 广度(宽度)优先搜索(BFS)
广度优先遍历 广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS. 图的BFS类似于树的层序遍历. 广度优先遍历 如图将左边的图变形,得到右边的图,然后一层一层的 ...
- hrbust 哈理工oj 1989 营救小组【BFS】
营救小组 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 181(39 users) Total Accepted: 46(35 use ...
- 宽度优先搜索算法(BFS)详解(超级详细讲解,附有大图)
目录 一.宽度优先搜索(BFS)是什么? 二.图解宽搜(BFS) 三.对比与发现 四.工具--队列 五.模板 六.最后 一.宽度优先搜索(BFS)是什么? 百度百科这样说: 宽度优先搜索算法(又称广度 ...
- UPC-1521 救援行动【搜索】
题目描述 Angel被人抓住关在一个迷宫了!迷宫的长.宽均不超过200,迷宫中有不可以越过的墙以及监狱的看守.Angel的朋友带了一个救援队来到了迷宫中.他们的任务是:接近Angel.我们假设接近An ...
- 【BFS三维路径规划】基于matlab广度优先搜索算法无人机三维路径规划【含Matlab源码 270期】
一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab广度优先搜索算法无人机 ...
- [YTU](3273)吃鸡之团队合作 ---- BFS
Description 暑假就要开始啦!小伙伴们又可以肆无忌惮的开黑吃鸡了喵!我们知道开黑吃鸡最重要的当然是团队合作了.在一个地图中,一个小队的玩家之间的距离不能太远,这样当队友遇到危险被击倒时才能保 ...
最新文章
- ArcGIS 坐标系统文件
- 一些比较好的设计网站的收藏
- Photoshop CC2015软件安装资料及教程
- Fedora 17 PHP编程环境配置
- 计算机网络tcp三次握手,快速掌握_计算机网络_TCP_三次握手
- [wp7游戏]wp7~~竞赛类游戏~~集合贴~~
- vue init download template_Webpack(四)Vue
- 找不到战网服务器ip地址,wow服务器ip地址-我怎么知道战网服务器的IP地址去PING, – 手机爱问...
- 人脸面部情绪识别(一)
- JavaScript 中 == 和 === 的区别
- 黑马程序员匠心之作|C++教程从0到1入门编程-c++核心编程
- 联通宽带在停电以后断网,重启猫还是没网,可能是设置出问题了
- 数字经济是什么?如何发展数字经济?
- 输入阻抗 输出阻抗
- 【静态时序分析】如何寻找时序分析的起点与终点
- 年薪30w还是白菜价?大数据工程师凭什么?
- vb6.0 CLng,CInt等的bug及其解决办法
- Eclipse配置Tomcat以及使用Tomcat启动项目
- 2023年1月23日--2023年1月29日(osg+glsl+socket+ue,本周20小时,合计1899小时,剩余8101小时)
- t3 服务器文件,用友T3软件数据库文件存放的位置