一道典型的迷宫问题

小刚在迷宫内,他需要从A点出发,按顺序经过B,C,D……,到达最后一个点,再回到A点。迷宫内有些障碍,问至少走几步。

输入描述 Input Description

第一行有三个数n,m表示迷宫有n行,m列。

第2行到第n+1行,每行m个字符,可能是’A’..’Z’,’2’,’0’ 其中,2表示障碍,0表示可以走。’A’..’Z’也可以走。

输出描述 Output Description

至少走几步可以按规定走完,如果不行,输出“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)的更多相关文章

  1. 双向广搜 codevs 3060 抓住那头奶牛

    codevs 3060 抓住那头奶牛 USACO  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 黄金 Gold   题目描述 Description 农夫约翰被告知一头逃跑奶牛 ...

  2. 算法数据结构——数的深搜和广搜(dfs和bfs)

    leetcode104 二叉树的最大深度 https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ 深度搜索分两种:递归(使用栈) ...

  3. 双向广搜+hash+康托展开 codevs 1225 八数码难题

    codevs 1225 八数码难题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Yours和zero在研究A*启 ...

  4. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  5. hdu 1195:Open the Lock(暴力BFS广搜)

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  7. poj3126 Prime Path 广搜bfs

    题目: The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...

  8. 什么时候用深搜(dfs)什么时候用广搜(bfs)(转)

    1.BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止.这个时候不适宜使 ...

  9. BFS广搜题目(转载)

    BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...

随机推荐

  1. hive集成sentry的sql使用语法

    Sentry权限控制通过Beeline(Hiveserver2 SQL 命令行接口)输入Grant 和 Revoke语句来配置.语法跟现在的一些主流的关系数据库很相似.需要注意的是:当sentry服务 ...

  2. 【Android Developers Training】 35. 序言:分享文件

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. web前段学习2017.6.15

    CSS---表现层,修饰和表现html文档,为了解决结构层和表现层分离的问题. 通过CSS极大的提高了工作效率,方便工作人员维护和管理CSS:层叠样式表,目前用的最广泛的css版本为css2,最新版本 ...

  4. 最近学习java时的记录

    1.java 的变量一共分为三种,类变量,局部变量,成员变量 类变量就是 加static修饰符的变量 2.java 的修饰符可分为两大类,一 可访问修饰符 protected private publ ...

  5. net 中web.config单一解决方法 (其他配置引入方式)

    近期一个项目需要写许多的配置项,发现在单个web.config里面写的话会很乱也难于查找 所以搜了一下解决了,记录下来 一.   webconfig提供了引入其他config的方式 <conne ...

  6. Android精品源码与技术博文

    Android精品源码android遵循Material Design风格天气源码基于exoplay 自定义播放器 支持直播 1 ExoUserPlayer 基本播放器...几种动画效果Animati ...

  7. FAT文件系统学习和思考

    FAT(File Allocation Table)文件系统 前两天面试,导师说我基础差,要赶紧补起来了.今天晚上看了FAT32文件系统,基本的信息都是百度百科中"FAT文件系统" ...

  8. JavaWeb 后端 <九> 之 JDBC加强

    一.大结果集的分页(重点,难点) 1.分批次查询:分页 2.基于数据库的分页:依赖的是数据库的分页语句(不同数据库是不同的) MySQL:每页显示10条. select * from XXX limi ...

  9. Java语言的9个主要特性

    Java作为时下很流行的一门编程语言,受到很多人的热爱,那么它有哪些特性呢?一起来看看吧. 1.Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用.另 ...

  10. pgsql 递归查询 分页

    --向下查询 WITH RECURSIVE res AS ( union ALL SELECT t_tree.* FROM t_tree, res WHERE t_tree.pid = res.id ...