一个一个走,记录方向改变了几次,不能超过两次,两次如果还没到终点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)相关推荐

  1. HDU1175 连连看【DFS】

    连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. HDU1175 连连看【DFS+剪枝】

    连连看 题意: 给定一个n*m的连连看的图,有q次操作,问点击(sx,sy)与(ex,ey)能否使方格消失(!!但是,就算可以消失,也不能改变原图,这q次操作相互之间没有联系).消失的条件详见题目. ...

  3. 【hdu1175】连连看——dfs(剪枝)

    题目: 连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  5. HDU 1175 连连看 dfs+剪枝

    点击打开链接 连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  6. HDU1175 连连看

    Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线 ...

  7. HDOJ 1175 连连看 DFS

    这题在DFS的同时必须考虑剪枝,,给出三个别人的代码,一个耗时7秒多,一个2秒多,最后一个只有46MS,相差甚大,都是剪枝的功劳. 1 #include <stdio.h> 2 #incl ...

  8. HDU1175:连连看(搜索)

    传送门 题意 给定一个n*m的矩阵,询问q次,两个方块是否能被消掉,弯折次数不超过两次 分析 这题写了有一个下午,思路很简单,但是有很多trick,(唉),我还是太弱 trick 初始判断:1.两点不 ...

  9. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  10. python爬取电影评分_用Python爬取猫眼上的top100评分电影

    代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...

最新文章

  1. 我国网络安全人才培养缺口巨大
  2. (原创)用c++11打造好用的any
  3. npm更新模块并同步到package.json中
  4. 成功解决AttributeError: ‘int‘ object has no attribute ‘encode‘
  5. Unix awk使用手册
  6. Highcharts使用表格数据绘制图表
  7. 云HBase内核解析
  8. 如何让.Net线程支持超时后并自动销毁!
  9. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)
  10. 思杰VDI外篇pvs安装
  11. apiCloud中aui获取不到高度,pos.h为0,offsetHeight为0问题
  12. 曾经的小弟, 成了现在的大牛
  13. echarts 地图自定义图标_Echarts3.0 地图自定义图标
  14. 非负数的和与个数c语言编程,C语言习题中,编程实现从键盘任意输入20个整数,统计非负数个数,并计算非负数之和...
  15. android 高德地图之poi搜索功能的实现
  16. 让你的Linux支持WEB修改密码(转)
  17. AT32F437基于LVGL的桌面显示案例
  18. git命令判断当前分支是否与master合并
  19. 西门子et200 分布式i/o_西门子S7-1500H冗余系统硬件及网络结构
  20. 车展背后|车规级芯片知多少?

热门文章

  1. 如何使用加密的Payload来识别并利用SQL注入漏洞
  2. laravel5.4 关于select下拉框读取数据库数据案例
  3. 小店怎么做内容营销?这个家居店铺有诀窍
  4. 【虚拟化实战】存储设计之七Block Size
  5. [Leetcode] Flatten Binary Tree to Linked List 整平二叉树
  6. 《算法竞赛入门经典》第一章1.5
  7. SQL Server 2012笔记分享-29:日志文件的工作方式
  8. Makefile和automake中判断CPU位数
  9. [MongoDB]db.serverStatus()命令详解
  10. Binder ThreadPoolMax default = 15