处理连连看问题。

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

用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下nginx tomcat集群

    集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器. 这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程 ...

  2. Linux的crontab应注意事项

    今天遇到一个问题,困扰了好久,刚开始时以为crontab定时任务配置错误,后经过验证没有错误,然后又怀疑到是不是权限问题呀?将权限跟改为root后,重新配置crontab定时任务,还是不行,真是让人气 ...

  3. 三维dem

    关注World wind Java,<World wind Java三维地理信息系统开发指南随书光盘 1. 下载worldwind java sdk 下载地址:http://builds.wor ...

  4. SQL0973N在 "<堆名>" 堆中没有足够的存储器可用来处理语句

    SQL0973N在 "<堆名>" 堆中没有足够的存储器可用来处理语句. 解释: 已使用此堆的所有可用内存.不能处理该语句. 用户响应: 接收到此消息(SQLCODE)后 ...

  5. MySQL的left on 【zt】

    MySQL的left on [zt] (2008-11-03 17:27:30) 转载▼ 标签:  it 分类: 学习笔记 MySQL多表连接查询Left Join,Right Join php开源嘛 ...

  6. python之零碎知识

    一 join方法 主要是做字符串的拼接:join后面跟的类型必须是要可迭代得到对象 for循环的对象是可迭代对象 # result = "".join(li) # print(re ...

  7. 2018.07.08 hdu4521 小明系列问题——小明序列(线段树+简单dp)

    小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...

  8. IntelliJ IDEA 2017版 spring-boot与Mybatis简单整合

    一.编译器建立项目 参考:http://www.cnblogs.com/liuyangfirst/p/8372291.html 二.代码编辑 1.建立数据库 /* Navicat MySQL Data ...

  9. Caused by: Unable to load configuration. - action - file:/C:/apache-tomcat-7.0.70/webapps/Structs/WEB-INF/classes/struts.xml:7:72 at com.opensymphony.xwork2.config.ConfigurationManager.getConfigurati

    Unable to load configuration. - action - file:/C:/apache-tomcat-7.0.70/webapps/Structs/WEB-INF/class ...

  10. ubuntu编译centos7部署大象医生 dr-elephant

    github下载源码 ubuntu上安装play,配置好环境变量 暂时不支持基于spark2.x的编译,所以compile.conf中spark版本不变 调用build.sh开始编译 编译好后dist ...