连连看

Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

 

Description

“连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的。现在已经酿成大祸,就只能将错就错了,连线不能从外围绕过。 
玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能不能消去。现在你的任务就是写这个后台程序。 

Input

输入数据有多组。每组数据的第一行有两个正整数n,m(0<n<=1000,0<m<1000),分别表示棋盘的行数与列数。在接下来的n行中,每行有m个非负整数描述棋盘的方格分布。0表示这个位置没有棋子,正整数表示棋子的类型。接下来的一行是一个正整数q(0<q<50),表示下面有q次询问。在接下来的q行里,每行有四个正整数x1,y1,x2,y2,表示询问第x1行y1列的棋子与第x2行y2列的棋子能不能消去。n=0,m=0时,输入结束。 
注意:询问之间无先后关系,都是针对当前状态的! 

Output

每一组输入数据对应一行输出。如果能消去则输出"YES",不能则输出"NO"。 

Sample Input

3 4
1 2 3 4
0 0 0 0
4 3 2 1
4
1 1 3 4
1 1 2 4
1 1 3 3
2 1 2 4
3 4
0 1 4 3
0 2 4 1
0 0 0 0
2
1 1 2 4
1 3 2 3
0 0

Sample Output

YES
NO
NO
NO
NO
YES

搜索,也可以用枚举
 1 //2016.8.20
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5
 6 using namespace std;
 7
 8 int mp[1005][1005], book[1005][1005];
 9 int dx[4] = {0, 1, 0, -1};
10 int dy[4] = {1, 0, -1, 0};
11 int n, m, x2, y2;
12 bool ok, fg;
13
14 void dfs(int x, int y, int pd, int tt)//pd表示上一次的方向,tt表示转折的次数
15 {
16     if(tt>3)return ;
17     if(x == x2 && y == y2)
18     {
19         cout << "YES" << endl;
20         ok = true;
21         return ;
22     }
23     if(x<1||x>n||y<1||y>m||mp[x][y]!=0)return;
24     if(ok)return ;
25     book[x][y] = 1;
26     for(int i= 0; i < 4; i++)
27     {
28         int nx = x+dx[i];
29         int ny = y+dy[i];
30         if(book[nx][ny]==1)continue;
31         if(i != pd)
32             dfs(nx, ny, i, tt+1);
33         else
34             dfs(nx, ny, i, tt);
35         book[nx][ny] = 0;
36     }
37 }
38 int main()
39 {
40     int q, x1, y1;
41     while(cin>>n>>m)
42     {
43         if(n==0&&m==0)break;
44         for(int i = 1; i <= n; i++)
45               for(int j = 1; j <= m; j++)
46                 scanf("%d", &mp[i][j]);
47
48         cin >> q;
49         while(q--)
50         {
51             scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
52             memset(book, 0, sizeof(book));
53             if(mp[x1][y1]==mp[x2][y2]&&mp[x1][y1]&&mp[x2][y2]&&x1>=1&&y1>=1&&x1<=n&&y1<=m&&x2>=1&&y2>=1&&x2<=n&&y2<=m)//剪枝
54             {
55                 ok = false;
56                 int tmp = mp[x1][y1];
57                 mp[x1][y1] = 0;
58                 dfs(x1, y1, -1, 0);
59                 mp[x1][y1] = tmp;
60                 if(!ok)cout << "NO" << endl;
61             }else
62             {
63                 cout << "NO" <<endl;
64             }
65         }
66     }
67
68     return 0;
69 }

转载于:https://www.cnblogs.com/Penn000/p/5791280.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. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  5. [C] [编程题]连通块(DFS解决)

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M 来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一) 题目描述 给一个01矩阵,1代表是陆地,0代表 ...

  6. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  7. usaco snail trails(dfs)

    dfs啊,我还写了好长时间,一天不如一天. /* ID:jinbo wu TASK: snail LANG:C++ */ #include<bits/stdc++.h> using nam ...

  8. usaco shuttle puzzle(dfs剪枝)

    这题一看我也以为找规律,然后无法下手之后又想到bfs最后看题解是用dfs大神dfs用的出神入化. 不过这题好像可以找规律. /* ID:jinbo wu TASK: shuttle LANG:C++ ...

  9. usaco street race(dfs)

    一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...

最新文章

  1. 基于海康机器视觉算法平台的对位贴合项目个人理解 | CSDN原力计划
  2. Spring Cloud第九篇:链路追踪Sleuth
  3. KafKa集群安装、配置
  4. Linux系统下使用桥接模式,无法ping通外网解决问题方案!
  5. 板子armv7_32怎么挂载windows文件夹?
  6. alpinestars与丹尼斯_胖摩的骑行路 篇四:真的值到了—丹尼斯MOTORSHOE AIR骑行靴...
  7. 第一章 1 常用库之time
  8. MyBatis(三)
  9. 无人驾驶遇见人工智能 百度将推有“大脑”的汽车
  10. jq中ajax请求跨域,用JQuery实现简单的Ajax跨域请求
  11. java 字符串contain_如何使用java.lang.String.contains()方法
  12. 大话西游之程序员做项目
  13. python gui控件案例_python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例...
  14. 结构优化设计with OPtiStruct
  15. 基于PCNN的图像增强matlab代码
  16. EXT2文件系统实现原理
  17. 微信app支付签名错误
  18. 一个人流浪,不必去远方
  19. Java--Files
  20. 因《C程序设计伴侣》的争执,谈谭浩强《C程序设计》的批评

热门文章

  1. 不同服务器数据库之间的数据操作
  2. java程序设计_Java程序设计-类和对象(笔记)
  3. 文献阅读High-throughput sequencing of the transcriptome and chromatin accessibility in the same cell
  4. 数据结构设计_数据结构算法设计题学起来很困难怎么破
  5. java restclient 调用_restclient 访问 springmvc java工程接口
  6. mysql innodb启动失败_关于mysql innodb启动失败无法重启的处理方法讲解
  7. 不同编译单元内的非局部静态对象的初始化次序问题
  8. osea/Beat Classification 4.3-4.5
  9. 文献查找网站集合(自用)
  10. Linux主要的系统目录及其简单描述