http://acm.hdu.edu.cn/showproblem.php?pid=1175

dfs(x,y,i,num),xy表示位置,i表示方向,num表示转向次数,num=2时候的剪枝很重要。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[][],vis[][],n,m,endx,endy,dis[][] = {{-,},{,-},{,},{,}},flag; void dfs(int x,int y,int dir,int num)
{
if(flag) return;
if(x == endx && y == endy)
{
flag = ;
return;
}
if(num == )
{
if(dir == ||dir == )
{
if(y != endy) return;
}
else
{
if(x != endx) return;
}
}
int xx,yy;
for(int i = ;i < ;i++)
{
xx = x+dis[i][];
yy = y+dis[i][];
if(xx < || xx > n || yy < || yy > m || vis[xx][yy]) continue;
if(xx == endx && yy == endy || a[xx][yy] == )
{
vis[xx][yy] = ;
if(i == dir) dfs(xx,yy,dir,num);
else if(num < )dfs(xx,yy,i,num+);
vis[xx][yy] = ;
}
} }
int main()
{
while(cin >> n >> m && n &&m)
{
flag = ;
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++) cin >> a[i][j];
}
int num;
cin >> num;
while(num--)
{
int beginx,beginy;
cin >> beginx >> beginy >> endx >> endy;
if(beginx == endx && beginy == endy || a[beginx][beginy] != a[endx][endy] || a[beginx][beginy] == )
{
cout << "NO" << endl;
continue;
}
flag = ;
memset(vis,,sizeof(vis));
for(int i = ;i < ;i++)
{
if(!flag) dfs(beginx,beginy,i,);
}
if(flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
return ;
}

HDU_1175_dfs的更多相关文章

随机推荐

  1. SqlBulkCopy批量插入和索引的关系

    .net中批量插入基本都用SqlBulkCopy,速度很快,但是这几天发现个问题,2000数据居然15s,百思不得其解.经过大量测试,发现过多的索引和索引碎片会严重影响插入速度,表的数据量大小反而不会 ...

  2. Oozie任务调度框架详解及使用简介(一)

    摘要:个人最近一段时间一直在使用oozie,从刚开始的各种别扭到现在越来越觉得有意思的情况下,想整理一下关于oozie的认知,整理出来一个oozie系列,本来市面上关于oozie的资料就比较少,希望写 ...

  3. 如何使用poi在word表格中插入行的4种方法

    本文记录了,在word表格中插入新行的几种方法.直接上代码说明 table.addNewRowBetween 没实现,官网文档也说明,只有函数名,但没具体实现,但很多文章还介绍如何使用这个函数,真是害 ...

  4. APICloud开发者进阶之路 |audioRecorder录音模块Demo

    本文出自APICloud官方论坛   audioRecorder 模块通过封装系统的录音接口,能够快速的为开发者提供一个完整的录音功能. 该模块提供Android和iOS版本,录音方式及录制的音频格式 ...

  5. java架构之路(多线程)JUC并发编程之Semaphore信号量、CountDownLatch、CyclicBarrier栅栏、Executors线程池

    上期回顾: 上次博客我们主要说了我们juc并发包下面的ReetrantLock的一些简单使用和底层的原理,是如何实现公平锁.非公平锁的.内部的双向链表到底是什么意思,prev和next到底是什么,为什 ...

  6. Java架构师线上问题排查,这些命令程序员一定用得到!

    Java架构师线上问题排查,这些命令程序员一定用得到! 线上问题排查,以下场景,你遇到过吗? 一.了解机器连接数情况 问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服 ...

  7. MongoDB聚合(aggregate)

    一.基础 1.什么是聚合? 聚合是基于数据处理的聚合管道,每个文档通过一个有多个阶段(stage)组成的管道可以对每个阶段的管道进行分组.过滤等功能,然后经过一系列的处理,输出相应的结果 db.集合名 ...

  8. vue需要知道哪些才能算作入门以及熟练

    前两天接到一个面试官问我vue什么程度才算作可以用于开发,以前从没遇到过类似问题.只能大致说了一些,事后觉得也应该总结一下,前端vue这么火热那究竟什么才算做入门什么才算做熟练,只是我个人观点,不代表 ...

  9. Zero down time upgrade with OGG -from 11g to 12c.

    High level steps upgrade from 11g to 12c database: 1)    Check network between source and target. 2) ...

  10. SpringBoot使用thymeleaf模板时报错:Template might not exist or might not be accessible by any of the configured Template Resolvers

    错误如下:Template might not exist or might not be accessible by any of the configured Template Resolvers ...