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 题目大意:如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子)这样的两个棋子可以 ...
随机推荐
- 图的强连通&双连通
http://www.cnblogs.com/wenruo/p/4989425.html 强连通 强连通是指一个有向图中任意两点v1.v2间存在v1到v2的路径及v2到v1的路径. dfs遍历一个图, ...
- 《算法:C语言实现》阅读笔记
//从今天起准备认真看完这本书.本渣虽然笨,但是窝懒啊.... //今天开始看第一章.希望坚持下去. 第一章 引言 通过讨论连通问题的几种算法,来引出算法的重要性. 1.1 连通问题的快速查找算法 感 ...
- POJ1182食物链 (并查集)
第一反应就是和那个搞基的虫子的题很像(poj2492 http://www.cnblogs.com/wenruo/p/4658874.html),不过是把种类从2变成了3. 错在很白痴的地方,卡了好久 ...
- (贪心5.1.1)POJ 1230 Pass-Muraille
/* * POJ_1230.cpp * * Created on: 2013年10月9日 * Author: Administrator */ #include <iostream> #i ...
- java使用xheditor Ajax异步上传错误
java使用xheditor Ajax异步上传时候错误如下:the request doesn't contain a multipart/form-data or multipart/mixed s ...
- 多点触控之MotionEvent.ACTION_MASK作用
ACTION_MASK在Android中是应用于多点触摸操作,字面上的意思大概是动作掩码的意思吧. 在onTouchEvent(MotionEvent event)中,使用switch (event. ...
- iOS Xcode的快捷键
将一些搜集和经常使用的快捷键记录下来,方便你我. Command +1~ 8: 跳转到导航区的不同位置 Command +0 :显示/隐藏导航区 Command Alt 1~ 6:在不同检测器之间跳转 ...
- jQuery获取Select选中的Text和Value,根据Value值动态添加属性
语法解释:1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发2. var chec ...
- 遍历map的四方方法
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- kontalk
Site: http://kontalk.org/ Code: https://github.com/kontalk/androidclient