hdu1175-连连看(dfs)
一个一个走,记录方向改变了几次,不能超过两次,两次如果还没到终点return;
1 #include<cstdio> 2 3 #include<string.h> 4 5 #define inf 0x3f3f3f3f 6 7 const int maxn=1000; 8 9 using namespace std; 10 11 const int dir[4][2]={{1,0},{0,1},{0,-1},{-1,0}}; 12 13 int flag[maxn+10][maxn+10]; 14 15 int n,m,q; 16 17 int sx,sy,gx,gy; 18 19 int a[maxn+10][maxn+10]; 20 21 int dfs(int x,int y,int dirc,int turn){ 22 //printf("%d %d %d %d\n",x,y,dirc,turn); 23 if(turn>2) return 0; 24 if(x==gx&&y==gy){ 25 return 1; 26 } 27 for(int i=0;i<4;i++){ 28 if(turn==2&&i!=dirc) continue; 29 int nx=x+dir[i][0]; 30 int ny=y+dir[i][1]; 31 if(nx==gx&&ny==gy){ 32 if(i==dirc||dirc==-1) return 1; 33 else if(i!=dirc&&turn+1<=2) return 1; 34 continue; 35 } 36 if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!flag[nx][ny]&&!a[nx][ny]){ 37 if(i==dirc||dirc==-1){ 38 flag[nx][ny]=1; 39 if(dfs(nx,ny,i,turn)) return 1; 40 } else if(i!=dirc){ 41 flag[nx][ny]=1; 42 if(dfs(nx,ny,i,turn+1)) return 1; 43 } 44 flag[nx][ny]=0; 45 } 46 } 47 return 0; 48 } 49 50 int main() 51 { 52 while(scanf("%d%d",&n,&m)!=EOF){ 53 if(n==0&&m==0) break; 54 for(int i=1;i<=n;i++){ 55 for(int j=1;j<=m;j++){ 56 scanf("%d",&a[i][j]); 57 } 58 } 59 scanf("%d",&q); 60 while(q--){ 61 memset(flag,0,sizeof(flag)); 62 scanf("%d%d%d%d",&sx,&sy,&gx,&gy); 63 if(!a[sx][sy]||!a[gx][gy]||a[sx][sy]!=a[gx][gy]){ 64 printf("NO\n"); 65 continue; 66 } 67 if(dfs(sx,sy,-1,0)) printf("YES\n"); 68 else printf("NO\n"); 69 } 70 } 71 return 0; 72 }
转载于:https://www.cnblogs.com/GeniusYang/p/5733172.html
hdu1175-连连看(dfs)相关推荐
- HDU1175 连连看【DFS】
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- HDU1175 连连看【DFS+剪枝】
连连看 题意: 给定一个n*m的连连看的图,有q次操作,问点击(sx,sy)与(ex,ey)能否使方格消失(!!但是,就算可以消失,也不能改变原图,这q次操作相互之间没有联系).消失的条件详见题目. ...
- 【hdu1175】连连看——dfs(剪枝)
题目: 连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
- HDU 1175 连连看 dfs+剪枝
点击打开链接 连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- HDU1175 连连看
Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线 ...
- HDOJ 1175 连连看 DFS
这题在DFS的同时必须考虑剪枝,,给出三个别人的代码,一个耗时7秒多,一个2秒多,最后一个只有46MS,相差甚大,都是剪枝的功劳. 1 #include <stdio.h> 2 #incl ...
- HDU1175:连连看(搜索)
传送门 题意 给定一个n*m的矩阵,询问q次,两个方块是否能被消掉,弯折次数不超过两次 分析 这题写了有一个下午,思路很简单,但是有很多trick,(唉),我还是太弱 trick 初始判断:1.两点不 ...
- ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...
- python爬取电影评分_用Python爬取猫眼上的top100评分电影
代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...
最新文章
- 我国网络安全人才培养缺口巨大
- (原创)用c++11打造好用的any
- npm更新模块并同步到package.json中
- 成功解决AttributeError: ‘int‘ object has no attribute ‘encode‘
- Unix awk使用手册
- Highcharts使用表格数据绘制图表
- 云HBase内核解析
- 如何让.Net线程支持超时后并自动销毁!
- 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)
- 思杰VDI外篇pvs安装
- apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
- 曾经的小弟, 成了现在的大牛
- echarts 地图自定义图标_Echarts3.0 地图自定义图标
- 非负数的和与个数c语言编程,C语言习题中,编程实现从键盘任意输入20个整数,统计非负数个数,并计算非负数之和...
- android 高德地图之poi搜索功能的实现
- 让你的Linux支持WEB修改密码(转)
- AT32F437基于LVGL的桌面显示案例
- git命令判断当前分支是否与master合并
- 西门子et200 分布式i/o_西门子S7-1500H冗余系统硬件及网络结构
- 车展背后|车规级芯片知多少?
热门文章
- 如何使用加密的Payload来识别并利用SQL注入漏洞
- laravel5.4 关于select下拉框读取数据库数据案例
- 小店怎么做内容营销?这个家居店铺有诀窍
- 【虚拟化实战】存储设计之七Block Size
- [Leetcode] Flatten Binary Tree to Linked List 整平二叉树
- 《算法竞赛入门经典》第一章1.5
- SQL Server 2012笔记分享-29:日志文件的工作方式
- Makefile和automake中判断CPU位数
- [MongoDB]db.serverStatus()命令详解
- Binder ThreadPoolMax default = 15