HDU1175:连连看(搜索)
传送门
题意
给定一个n*m的矩阵,询问q次,两个方块是否能被消掉,弯折次数不超过两次
分析
这题写了有一个下午,思路很简单,但是有很多trick,(唉),我还是太弱
trick
初始判断:1.两点不重叠
2.两点数值相等并且不为空
dfs中判断:1.每次访问节点深搜时打访问标记,回溯取消标记
2.一个强力剪枝
if(cnt==2&&(x-x2)&&(y-y2)) return ;
讲解:如果当到达一点弯折度已达2,并且该点与终点不在同一行/列,则返回。
强力剪枝!将我交的第一发8517ms降到124ms,很强!
代码
#include<cstdio>
#include<cstring>
#define R(i,a,b) for(int i=a;i<b;++i)
#define F(i,a,b) for(int i=a;i<=b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
int t,n,m,a[1010][1010],q,x1,y1,x2,y2;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int flag;
void dfs(int x,int y,int cnt,int pre)
{
// printf("1.x=%d y=%d cnt=%d pre=%d\n",x,y,cnt,pre);
if(flag) return ;
if(x<1||y<1||x>n||y>m) return ;
if(cnt>2) return ;
if(cnt==2&&(x-x2)&&(y-y2)) return ;
//printf("(cnt==2&&(x-x2)&&(y-y2))=%d\n",(cnt==2&&(x-x2)&&(y-y2)));
//if(cnt==2&&(x-x2)&&(y-y2)) return ;
if(x2==x&&y2==y) { flag=1;return ; }
//printf("a[%d][%d]=%d\n",x,y,a[x][y]);
//printf("2.x=%d y=%d cnt=%d pre=%d\n",x,y,cnt,pre);
R(i,0,4)
{
int xx=x+dir[i][0],yy=y+dir[i][1];
int cnt1;
if(pre!=i) cnt1=cnt+1;else cnt1=cnt;
if(a[xx][yy]==0)
{
a[xx][yy]=1;
//printf("3.a[%d][%d]=%d\n",xx,yy,a[xx][yy]);
dfs(xx,yy,cnt1,i);
a[xx][yy]=0;
}
else if(xx==x2&&yy==y2)
{
dfs(xx,yy,cnt1,i);
if(flag) return ;
}
// printf("3.x=%d y=%d cnt=%d pre=%d\n",xx,yy,cnt,pre);
//if(pre!=i) dfs(xx,yy,cnt+1,i);else dfs(xx,yy,cnt,i);
}
}
int main()
{
while(scanf("%d %d",&n,&m),n+m)
{
F(i,1,n)F(j,1,m) scanf("%d",&a[i][j]);
for(scanf("%d",&q);q--;)
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if(a[x1][y1]!=a[x2][y2]||a[x1][y1]==0||(x1==x2&&y1==y2)) { flag=0;goto l; }
flag=0;
R(i,0,4)
{
int xx=x1+dir[i][0],yy=y1+dir[i][1];
if(xx<1||yy<1||xx>n||yy>m) continue;
if(flag) break;
if(a[xx][yy]==0)
{
a[xx][yy]=1;//已访问过
dfs(xx,yy,0,i);
a[xx][yy]=0;//回溯清标记
}
else if(xx==x2&&yy==y2)
{
dfs(xx,yy,0,i);
}
}
l:if(flag) puts("YES");else puts("NO");
}
}
}
HDU1175:连连看(搜索)的更多相关文章
- hdu1175 连连看(bfs疯狂MLE和T,遂考虑dfs+剪枝)
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1175/ 题目大意就是给出地图,上面有若干的数,相当于连连看,给了q个查询,问给出的两个位置的数能否在两次转弯以内 ...
- hdu1175连连看
Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...
- HDU1175 连连看(DFS)
Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...
- HDU1175 连连看(bfs) 2016-07-24 13:27 115人阅读 评论(0) 收藏
连连看 Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通 ...
- hdu1175连连看(dfs+细节)
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu1175 连连看
连连看 HDU - 1175 “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子 ...
- 连连看[HDU1175]
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 连连看(简单搜索)bfs
连连看Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 连连看 HDU - 1175_搜索_剪枝
hdu有毒,考试上 AC 的就是一直 WA- 其实这道题是可以进行初始化来进行优化的,这样的话询问次数是可以达到 10510^5105 的.不过普通的 dfsdfsdfs + 剪枝也是可过的. Cod ...
随机推荐
- HDU 5512 Pagodas【博弈】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5512 题意: 给定集合,最初有两个数a,b,如果两个人依次使用集合中的元素相加减,如果得到的数均不在 ...
- 洛谷—— P1656 炸铁路
P1656 炸铁路 题目描述 因为某国被某红色政权残酷的高压暴力统治.美国派出将军uim,对该国进行战略性措施,以解救涂炭的生灵. 该国有n个城市,这些城市以铁路相连.任意两个城市都可以通过铁路直接或 ...
- hdu6110(线段树+lca)
题目 http://acm.hdu.edu.cn/showproblem.php?pid=6110 分析 注意到,若干条路径的交一定也是条路径 我们可以维护一个线段树,seg[l..r]存着第l条~第 ...
- Linux下设置swappiness参数来配置内存使用到多少才开始使用swap分区(转)
swappiness的值的大小对如何使用swap分区是有着很大的联系的.swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用s ...
- centos、mac的grafana安装和简单使用
1.安装: 参考官方文档安装说明:https://grafana.com/grafana/download Redhat & Centos(64 Bit): wget https://s3-u ...
- Windows平台下Git(gitblit)服务器搭建
环境:Windows 10 专业版32位 因为公司服务器上已经搭了Visual SVN等,只好在Windows上搭个Git Server给大家用. 参考链接:http://www.cnblogs.co ...
- spring mvc 整理
spring mvc 整理
- javascript是什么?
JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由全部的现 ...
- Android +NDK+eclipse+opengl ES2.0 开启深度測试
參考:https://www.opengl.org/discussion_boards/showthread.php/172736-OpenGL-ES-Depth-Buffer-Problem 环境: ...
- 答读者问(6):有关IT培训和毕业之前的迷茫等问题
近期在微博上与一些读者朋友们交流,发现大家对自己的未来都比較的关心.有些朋友认为在大学里面没有学到什么东西,问我要不要到一些IT培训机构去"速成".另一些朋友即将毕业,不知道自己走 ...