广搜:codevs-3344(初步bfs)
一道典型的迷宫问题
小刚在迷宫内,他需要从A点出发,按顺序经过B,C,D……,到达最后一个点,再回到A点。迷宫内有些障碍,问至少走几步。
第一行有三个数n,m表示迷宫有n行,m列。
第2行到第n+1行,每行m个字符,可能是’A’..’Z’,’2’,’0’ 其中,2表示障碍,0表示可以走。’A’..’Z’也可以走。
至少走几步可以按规定走完,如果不行,输出“Impossible”
读完题后发现这道题比较吸引人的一点是在同一组数据中需要进行多次bfs,很有趣。
比较坑的地方在于,每一次需要判断是否能到达下一点,如果其中一个点到不了,那么便mission fail~
那么没什么问题啦,贴代码:
(写这道题的时候有点着急,以至于变量使用的有点乱QAQ)
#include<bits/stdc++.h>
using namespace std;
int ans,pre[],xz,yz,head,tail,n,m,flag;
int u[]={,-,,},p[]={,,,-};
int a[],b[],x[],y[];
bool map1[][],map2[][];
void pro(int num){
while(pre[num]){
++ans;
num=pre[num];
}
return ;
}
void doit(){
int i;
do{
head++;
for( i = ; i < ; ++i){
int xk=u[i]+a[head];
int yk=p[i]+b[head];
if(xk>=&&xk<=n&&yk>=&&yk<=m&&map2[xk][yk]){
tail++;
a[tail]=xk;b[tail]=yk;pre[tail]=head;
map2[xk][yk]=false;
if(xk==xz&&yk==yz){
flag=;
pro(tail);head=tail;
break;
}
}
}
}while(head<tail);
}
void start(){
int i,j;
flag=;
head=;tail=;
memset(pre,,sizeof(pre));
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(map2,true,sizeof(map2));
for(i = ; i <= n ; ++i)
for(j = ; j <= m ; ++j)
map2[i][j]=map1[i][j]; }
int main(){
int j,sum=;
char s[];
memset(map1,true,sizeof(map1));
scanf("%d%d",&n,&m);
for(int i = ; i <= n ; ++i){
scanf("%s",s);
for( j = ; j <= m ; ++j){
if(s[j-]=='')map1[i][j]=false;
if(s[j-]>=){
x[s[j-]-]=i;
y[s[j-]-]=j;
sum++;
}
}
}
for(int i = ; i < sum ; ++i){
start();
xz=x[i+];yz=y[i+];
a[tail]=x[i];b[tail]=y[i];pre[tail]=;
map2[x[i]][y[i]]=false;
doit();
if(!flag){
printf("Impossible\n");
return ;
}
}
start();
xz=x[];yz=y[];
a[tail]=x[sum];b[tail]=y[sum];pre[tail]=;
map2[x[sum]][y[sum]]=false;
doit();
if(!flag){
printf("Impossible\n");
return ;
}
printf("%d\n",ans);
return ;
}
广搜:codevs-3344(初步bfs)的更多相关文章
- 双向广搜 codevs 3060 抓住那头奶牛
codevs 3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛 ...
- 算法数据结构——数的深搜和广搜(dfs和bfs)
leetcode104 二叉树的最大深度 https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ 深度搜索分两种:递归(使用栈) ...
- 双向广搜+hash+康托展开 codevs 1225 八数码难题
codevs 1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启 ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- hdu 1195:Open the Lock(暴力BFS广搜)
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- poj3126 Prime Path 广搜bfs
题目: The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...
- 什么时候用深搜(dfs)什么时候用广搜(bfs)(转)
1.BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止.这个时候不适宜使 ...
- BFS广搜题目(转载)
BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...
随机推荐
- ionic ios项目真机运行-不用开发者账号
ionic ios项目真机运行-不用开发者账号 1. 添加ios平台 ionic platform add ios 2.使用XCODE打开项目 3.使用APPID登录XCODE 打开XCODE账号登录 ...
- 开源分享,使用Servlet实现360商城
简介 今天翻看硬盘,无意间看到这个项目的workspace,掀起了我无尽的回忆啊,一把辛酸一把泪. 现在把这个现在看来比较low的项目分享出来,也算记录下当初菜鸟的成长之路了,也希望能够对刚入门的朋友 ...
- Linux网络配置及相关命令
Linux的网络配置是曾一直是我学习Linux的埋骨之地,投入了大量的精力和心神让自己的虚拟机联网.后来发现,仅仅是一个大意,我在这个坑上一躺就是一年半.现在总结一下这个伤心地.希望对有帮助. VMw ...
- zookeeper初试
实验环境: os-platform: windows7 x64 jdk: 1.7 参考文档: http://www.ibm.com/developerworks/cn/opensource/os-cn ...
- usaco training 4.1.1 麦香牛块 题解
Beef McNuggets题解 Hubert Chen Farmer Brown's cows are up in arms, having heard that McDonalds is cons ...
- 一次C++调试记录
之前开发用Linux C比较多,C++中的STL 容器基本没有接触过.最近在学习C++,平时用到c++ 17中的部分新特性,下面就简单分享下自己C++的学习流程. 一.环境搭建 本 ...
- ES6中的Set、Map数据结构
Map.Set都是ES6新的数据结构,他们都是新的内置构造函数.也就是说typeof的结果,多了两个. 他们是什么: Set是不能重复的数组. Map是可以任何东西当做键的对象: ES6 提供 ...
- 简单的使用Seajs
什么是Seajs Seajs是一个加载器 http://yslove.net/seajs/ 遵循 CMD 规范模块化开发,依赖的自动加载.配置的简洁清晰. 兼容性 Chrome 3+ Firefox ...
- Angularjs Material
公司用Angularjs Material进行开发,之前在网站上看了一些Demo,做一个学习的整理. 1.新建窗体的数据绑定 1.1修改kendo表格新增页面按钮,添加按钮,并Dialog一个窗体 t ...
- css3 变换 transform(2D)
一.transform变换 可做拉伸.压缩.旋转.偏移的效果.需加各个浏览器前缀. 二.transform-origin 为transform属性值的基点,默认值为元素的中心位置,即以元素左上角为坐标 ...