hdu1175-连连看(dfs)
一个一个走,记录方向改变了几次,不能超过两次,两次如果还没到终点return;
#include<cstdio>
#include<string.h>
#define inf 0x3f3f3f3f
const int maxn=;
using namespace std;
const int dir[][]={{,},{,},{,-},{-,}};
int flag[maxn+][maxn+];
int n,m,q;
int sx,sy,gx,gy;
int a[maxn+][maxn+];
int dfs(int x,int y,int dirc,int turn){
//printf("%d %d %d %d\n",x,y,dirc,turn);
if(turn>) return ;
if(x==gx&&y==gy){
return ;
}
for(int i=;i<;i++){
if(turn==&&i!=dirc) continue;
int nx=x+dir[i][];
int ny=y+dir[i][];
if(nx==gx&&ny==gy){
if(i==dirc||dirc==-) return ;
else if(i!=dirc&&turn+<=) return ;
continue;
}
if(nx>=&&nx<=n&&ny>=&&ny<=m&&!flag[nx][ny]&&!a[nx][ny]){
if(i==dirc||dirc==-){
flag[nx][ny]=;
if(dfs(nx,ny,i,turn)) return ;
} else if(i!=dirc){
flag[nx][ny]=;
if(dfs(nx,ny,i,turn+)) return ;
}
flag[nx][ny]=;
}
}
return ;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
if(n==&&m==) break;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
scanf("%d",&q);
while(q--){
memset(flag,,sizeof(flag));
scanf("%d%d%d%d",&sx,&sy,&gx,&gy);
if(!a[sx][sy]||!a[gx][gy]||a[sx][sy]!=a[gx][gy]){
printf("NO\n");
continue;
}
if(dfs(sx,sy,-,)) printf("YES\n");
else printf("NO\n");
}
}
return ;
}
hdu1175-连连看(dfs)的更多相关文章
- HDU1175 连连看(DFS)
Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...
- hdu1175连连看(dfs+细节)
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu1175 连连看(bfs疯狂MLE和T,遂考虑dfs+剪枝)
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1175/ 题目大意就是给出地图,上面有若干的数,相当于连连看,给了q个查询,问给出的两个位置的数能否在两次转弯以内 ...
- HDOJ1175连连看 DFS
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- 连连看(dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others) ...
- hdu1175 连连看
连连看 HDU - 1175 “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子 ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
- hdu 1175 连连看 DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 解题思路:从出发点开始DFS.出发点与终点中间只能通过0相连,或者直接相连,判断能否找出这样的路 ...
- hdu1175连连看
Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...
- HDU 1175 连连看 (DFS+剪枝)
<题目链接> 题目大意:在一个棋盘上给定一个起点和终点,判断这两点是否能通过连线连起来,规定这个连线不能穿过其它的棋子,并且连线转弯不能超过2次. 解题分析:就是DFS从起点开始搜索,只不 ...
随机推荐
- BZOJ 1612 [Usaco2008 Jan]Cow Contest奶牛的比赛:floyd传递闭包
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1612 题意: 有n头牛比赛. 告诉你m组(a,b),表示牛a成绩比牛b高. 保证排名没有并 ...
- RQNOJ 311 [NOIP2000]乘积最大:划分型dp
题目链接:https://www.rqnoj.cn/problem/311 题意: 给你一个长度为n的数字,用t个乘号分开,问你分开后乘积最大为多少.(6<=n<=40,1<=k&l ...
- 2017SN多校D1T1 loveletter:模拟
题意: 两张n*m的纸.一张透明纸,上面有些地方是黑的,有些地方是透明的.另一张纸上写满了字母. 你需要将透明纸放在写字的纸上,分别顺时针旋转0°.90°.180°.270°,每次从上到下.从左到右写 ...
- PS 色调— —颜色梯度
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- Gym - 101341I:Matrix God(随机算法)
题意:给出N,以及三个矩阵A,B,C,大小都为N*N.问是否满足A*B=C: N<1000: 思路:由于矩阵乘法的复杂度为O(N^3):而部分验证又不能保证结果正确.我们巧妙地利用矩阵乘法的结合 ...
- 取分组TOPN好理解案例
- BZOJ4836: [Lydsy1704月赛]二元运算
BZOJ4836: [Lydsy1704月赛]二元运算 https://lydsy.com/JudgeOnline/problem.php?id=4836 分析: 分开做,维护两个桶. 分治每次求\( ...
- ACM学习历程—NPU1086 随机数 2015年陕西省程序设计竞赛网络预赛(正式赛)C题 (计数排序 || set容器)
Description 开学了,ACM队的边老板想在学校中请一些妹子一起做一项问卷调查,调查妹子们对ACM的了解情况,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100), ...
- 监测GPU使用情况命令
每2秒监测一次:watch -n 2 nvidia-smi
- 物化视图基础概念、mview跨库迁移表
概念:物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样 ...