一个一个走,记录方向改变了几次,不能超过两次,两次如果还没到终点return;

 #include<cstdio>

 #include<string.h>

 #define inf 0x3f3f3f3f

 const int maxn=;

 using namespace std;

 const int dir[][]={{,},{,},{,-},{-,}};

 int flag[maxn+][maxn+];

 int n,m,q;

 int sx,sy,gx,gy;

 int a[maxn+][maxn+];

 int dfs(int x,int y,int dirc,int turn){
//printf("%d %d %d %d\n",x,y,dirc,turn);
if(turn>) return ;
if(x==gx&&y==gy){
return ;
}
for(int i=;i<;i++){
if(turn==&&i!=dirc) continue;
int nx=x+dir[i][];
int ny=y+dir[i][];
if(nx==gx&&ny==gy){
if(i==dirc||dirc==-) return ;
else if(i!=dirc&&turn+<=) return ;
continue;
}
if(nx>=&&nx<=n&&ny>=&&ny<=m&&!flag[nx][ny]&&!a[nx][ny]){
if(i==dirc||dirc==-){
flag[nx][ny]=;
if(dfs(nx,ny,i,turn)) return ;
} else if(i!=dirc){
flag[nx][ny]=;
if(dfs(nx,ny,i,turn+)) return ;
}
flag[nx][ny]=;
}
}
return ;
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
if(n==&&m==) break;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
scanf("%d",&q);
while(q--){
memset(flag,,sizeof(flag));
scanf("%d%d%d%d",&sx,&sy,&gx,&gy);
if(!a[sx][sy]||!a[gx][gy]||a[sx][sy]!=a[gx][gy]){
printf("NO\n");
continue;
}
if(dfs(sx,sy,-,)) printf("YES\n");
else printf("NO\n");
}
}
return ;
}

最新文章

  1. 项目vue2.0仿外卖APP(四)
  2. JavaScript:this是什么?
  3. Linux-awk直接修改原文件
  4. PHP内核探索之变量(6)- 后续内核探索系列大纲备忘
  5. segmentfault.com mongo出识以及对数组的操作
  6. 关于IP地址的一个细节问题
  7. 关于mysql中int(1)中int后面的数字
  8. js基础之DOM
  9. Linux 基本命令学习笔记
  10. best javascript framework list -- 最好的js框架
  11. Objective-C对象模型及应用
  12. Redis 基本安全规范文档
  13. D3.js使用过程中的常见问题(D3版本D3V4)
  14. 【原】关于定时回查出现的BUG有感
  15. 拷贝JAR包
  16. 杭电ACM2002--计算球体积
  17. 关于前端滚动条,input框等样式的修改
  18. C# 语言历史版本和特性
  19. hdu4190 二分答案
  20. Writing device drivers in Linux: A brief tutorial

热门文章

  1. openfire性能调优
  2. MySQL计算指标连续两月金额相比_20160929
  3. 《HTTP2基础教程》笔记
  4. PowerShell自动部署网站—(2)、安装.Net Framework
  5. Python中的getattr()函数详解
  6. RHEL6安装JDK7
  7. day6 面向对象(2)
  8. 6、scala面向对象-对象
  9. centos6.5安装gtk开发环境
  10. Navicat导出数据库结构为PDF