处理连连看问题。

要求拐弯方向不多于两次。剪枝很重要!!!

用dir记录当前方向。Orz,居然没想到。

 #include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 1005
using namespace std;
const int dx[]={-,,,},dy[]={,,-,};
int map[maxn][maxn],V[maxn][maxn];
int n,m,flag,x1,x2,y1,y2;
void dfs(int x,int y,int num,int dir){
if (flag || x< || x>=n || y< || y>=m || V[x][y]) return ;
if (num== && x!=x2 && y!=y2) return ;//当拐弯数为2,但与终点不在同一方向
if (num>) return ;
if (num<= && x==x2 && y==y2){
flag=;
return ;
}
if (map[x][y]!=){
if (x==x1 && y==y1) ;
else return ;
}//当前不为零且不为起点,即路径上有棋子
V[x][y]=;
for (int i=;i<;i++){
int xx=x+dx[i],yy=y+dy[i];
if (i==dir) dfs(xx,yy,num,i);
else dfs(xx,yy,num+,i);
}
V[x][y]=;
return ;
}
int main(){
int t;
while (cin >> n >> m && n+m){
memset(map,,sizeof(map));
for (int i=;i<n;i++){
for (int j=;j<m;j++){
cin >> map[i][j];
}
}
cin >> t;
while (t--){
cin >> x1 >> y1 >> x2 >> y2;
x1--,y1--,x2--,y2--;
if (x1==x2 && y1==y2){
cout << "NO\n";
continue;
}//起点与终点相同不能消去
if (map[x1][y1]!=map[x2][y2] || !map[x1][y1] || !map[x2][y2]){
cout << "NO\n";
continue;
}//起点与终点不同,或起点或终点位置没有棋子
if (x1< || x1>=n || y1< || y1>=m || x2< || x2>=n || y2< || y2>=m){
cout << "NO\n";
continue;
}//所给坐标超出当前范围
flag=;
memset(V,,sizeof(V));
for (int i=;i<n;i++){
dfs(x1+dx[i],y1+dy[i],,i); //从一个点的四个方向开始 ,拐弯数 ,当前方向
}
if (flag) cout << "YES\n";
else cout << "NO\n";
}
}
return ;
}

hdoj1175 连连看(dfs+剪枝)的更多相关文章

  1. HDOJ1175连连看 DFS

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

  2. HDU 1175 连连看 (DFS+剪枝)

    <题目链接> 题目大意:在一个棋盘上给定一个起点和终点,判断这两点是否能通过连线连起来,规定这个连线不能穿过其它的棋子,并且连线转弯不能超过2次. 解题分析:就是DFS从起点开始搜索,只不 ...

  3. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. POJ 3009 DFS+剪枝

    POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...

  5. poj 1724:ROADS(DFS + 剪枝)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10777   Accepted: 3961 Descriptio ...

  6. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  7. DFS+剪枝 HDOJ 5323 Solve this interesting problem

    题目传送门 /* 题意:告诉一个区间[L,R],问根节点的n是多少 DFS+剪枝:父亲节点有四种情况:[l, r + len],[l, r + len - 1],[l - len, r],[l - l ...

  8. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  9. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  10. LA 6476 Outpost Navigation (DFS+剪枝)

    题目链接 Solution DFS+剪枝 对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走. 记录经过每个点的最大弹药数,对dfs进行剪枝. #i ...

随机推荐

  1. linux下添加用户并赋予root权限

    1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户#passwd tommy   //修改密码Changing pass ...

  2. oracle执行多个pl/sql块

    DECLARE    V_SQL_DROP_TABLE   VARCHAR2(50) := 'DROP TABLE MY_TEST2';    V_SQL_CREATE_TABLE VARCHAR2( ...

  3. java 打包jar 并后台运行

    编译java: javac main.java 运行: java main.class 生成jar: 第一步:新建 一个MANIFEST.MF 第二步:将如下信息放到该文件中 Manifest-Ver ...

  4. 二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】

    上一篇我们介绍了kubernetes集群架构以及系统参数配置,参考:二进制搭建kubernetes多master集群[开篇.集群环境和功能介绍] 下面本文etcd集群才用三台centos7.5搭建完成 ...

  5. eclipse代码自动提示,eclipse设置代码自动提示

    eclipse代码自动提示,eclipse设置代码自动提示 eclipse是很多JAVA开发者基本上都用的工具,用它可以很方便的开发JAVA代码,当编写JAVA代码时,大部分人都是按组合键[Alt+/ ...

  6. SBIT

    SBIT chmod -R o+t dirs/ 给指定目录设置保护,只有所有者才能删除.

  7. (连通图 模板题)迷宫城堡--hdu--1269

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1269 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  8. android public.xml 用法

    一.android的pulibc.xml文件 如果你用 apktoool 反编译过 apk 就知道,反编译后res/values 下有一个 public.xml 文件,内容如图   这个东西有什么用呢 ...

  9. hdu 4946 凸包注意重点

    http://acm.hdu.edu.cn/showproblem.php?pid=4946 给你n个点的坐标和速度,如果一个点能够到达无穷远处,且花费的时间是最少的,则此点输出1,否则输出0. 每个 ...

  10. Icicle partition

    <!DOCTYPE html> <html> <head> <title>Icicle</title> <script type=&q ...