HDU 1175 连连看(BFS)
连连看
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13730 Accepted Submission(s): 3579
玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能不能消去。现在你的任务就是写这个后台程序。
注意:询问之间无先后关系,都是针对当前状态的!
# include<stdio.h>
# include<string.h>
# include<queue>
using namespace std;
int map[][];
int vis[][];
int n,m;
struct Node{
int x,y,dir,times; //dir表示方向 ,times表示转弯的次数
}st,en; queue<Node>q;
int dx[]={-,,,};
int dy[]={,-,,};
bool ismap(int x,int y){
if(x< || y< || x>n ||y>m)
return false;
return true;
}
void BFS(){
memset(vis,,sizeof(vis));
while(!q.empty()) q.pop();
vis[st.x][st.y] = ;
q.push(st);
bool tmp = false;
int i;
while(!q.empty()){
Node a = q.front(); q.pop();
if(a.x == en.x && a.y ==en.y){
tmp = true;
break;
}
for(i=;i<;i++){
Node b;
b.x = a.x + dx[i];
b.y = a.y + dy[i];
b.dir = i;
b.times = a.times;
if(!(a.dir==-||a.dir+b.dir==||a.dir==b.dir)) //a.dir+b.dir==3表示转180度的弯
b.times = a.times + ;
if(!ismap(b.x,b.y)) continue;
if(vis[b.x][b.y]) continue;
if(map[b.x][b.y] && !(b.x==en.x&&b.y==en.y)) continue; //很重要,如果不是空格子并且不是终点
if(b.times > ) continue;
vis[b.x][b.y] = ;
q.push(b);
}
}
if(tmp)
puts("YES");
else
puts("NO");
}
int main()
{
while(scanf("%d%d",&n,&m)&&n&&m){
int i,j,T;
for(i=;i<=n;i++)
for(j=;j<=m;j++)
scanf("%d",&map[i][j]);
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&st.x,&st.y,&en.x,&en.y);
st.times = ; st.dir = -;
if(map[st.x][st.y] != map[en.x][en.y])
puts("NO");
else if(map[st.x][st.y] == || map[en.x][en.y] == )
puts("NO");
else
BFS();
}
}
return ;
}
BFS中,用到queue,如果头文件里边没有using namespace std;这句话,在VC里边会编译出错,郁闷。。。
HDU 1175 连连看(BFS)的更多相关文章
- HDU 1175 连连看(超级经典的bfs之一)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others) ...
- hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...
- HDU - 1175 连连看 【DFS】【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1175 思路 这种题一想到就用搜索, 但是内存是32m 用 bfs 会不会MLE 没错 第一次 BFS的 ...
- HDU 1175 连连看【BFS】
题意:给出起点和终点的棋子,不能经过别的棋子,而且转弯的次数不能超过2次,问能否消除 和逃离迷宫一样,每个节点记录下来它的当前的方向和转弯的次数,再搜 注意特判起点的棋子和终点的棋子为0或者不一样的情 ...
- HDU 1175 连连看
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1175 连连看 DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 解题思路:从出发点开始DFS.出发点与终点中间只能通过0相连,或者直接相连,判断能否找出这样的路 ...
- Hdu 1175 连连看(DFS)
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 因为题目只问能不能搜到,没问最少要几个弯才能搜到,所以我采取了DFS. 因为与Hdu ...
- HDU 1175 连连看 (深搜+剪枝)
题目链接 Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以 ...
- hdu 1175 连连看 (深搜)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 题目大意:如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子)这样的两个棋子可以 ...
随机推荐
- java 小结1(static ,final,泛型)
static,final. (1)final: final:属于“终态”,意思就是不可以改变.可以修饰非抽象类,非抽象类的方法等.反正就是不能够再改变赋值了. 注意:1)fina类不能被继承,所以它没 ...
- 导入excel数据
前提条件:先要安装好EXCEL软件. 程序中经常要用到导入excel数据的功能.其实通过ole操作excel就简单的几行代码,但记性不好,经常要用经常要找, 还是作篇笔记吧. var ExcelApp ...
- php的fread函数的一个巨大的坑
先看看fread的manual,如下: http://php.net/manual/en/function.fread.php fread() reads up to length bytes fro ...
- XML 语法规则
转摘自:http://www.w3school.com.cn/xml/xml_elements.asp XML 语法规则 XML 文档包含 XML 元素. XML 的语法规则很简单,且很有逻辑.这些规 ...
- 使用sqlite3 有关tableview删除cell的问题
在root页面,想要删除tableviewcell,是有一定顺序的 首先要删除 数据库sqlite3 中的数据,然后删除数组中的数据,最后删除cell 一般我们知道,删除cell要在删除数组数据之后, ...
- 【转】C++的继承与多态:为什么需要虚函数
转自:http://www.educity.cn/zk/gjyy/201306271108011682.htm 多态性是面向对象设计语言的基本特征.仅仅是将数据和函数捆绑在一起,进行类的封装,使用一些 ...
- 使用ThinkPHP框架高速开发站点(多图)
使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...
- mysql优化之索引优化
Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引 ...
- 分享功能使用的UIPopoverController在iOS9 过期,替换为popoverPresentationController
记录一下 以备以后用到的时候拿出来看看.以前使用的: 1 if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom ...
- ThinkPHP函数详解:import方法
import方法是ThinkPHP框架用于类库导入的封装实现,尤其对于项目类库.扩展类库和第三方类库的导入支持,import方法早期的版本可以和java的import方法一样导入目录和通配符导入,后来 ...