HDOJ1175 连连看
来源:互联网 发布:天猫数据在线直播 编辑:程序博客网 时间:2024/05/24 05:11
#include <iostream>#include <fstream>#include <stdlib.h>#include <string.h>#include <stdio.h>using namespace std;int q,x1,y1,x2,y2,m,n;const int N=1001;int a[N][N];bool line(int x1,int y1,int x2,int y2)//无拐角检测{ int s,e; bool temp; if(x1==x2) { s=y1<y2?y1:y2; e=y1>y2?y1:y2; temp=true; for(int i=s+1;i<=e-1;i++) if(a[x1][i]!=0)temp=false; return temp; } if(y1==y2) { s=x1<x2?x1:x2; e=x1>x2?x1:x2; temp=true; for(int i=s+1;i<=e-1;i++) if(a[i][y1]!=0)temp=false; return temp; } return false;}bool check2(int x1,int y1,int x2,int y2)//一个折点检测{ if(x1!=x2 && y1!=y2)//只有一个拐点时,两点肯定不能同行同列 { if(a[x2][y1]==0) { if(line(x1,y1,x2,y1)&&line(x2,y2,x2,y1)) { return true; } } if(a[x1][y2]==0) { if(line(x1,y1,x1,y2)&&line(x2,y2,x1,y2))<span style="white-space:pre"></span> { return true;<span style="white-space:pre"></span> } } return false; } return false;}int ok(int x1,int y1,int x2,int y2){ if (x1==x2 && y1==y2) return 0; //is right if (a[x1][y1]==0 || a[x2][y2]==0) return 0; if (a[x1][y1]!=a[x2][y2]) return 0; if(line(x1,y1,x2,y2))return 1;//无拐点检测 if(check2(x1,y1,x2,y2))return 1;//一个拐点检测 int px,py; //以下四个循环为两个折点检测 //依次判断与点x1,y1能直线连接的点能否与x2,y2构成一个折点连接 for(px=x1-1,py=y1;px>0;--px)//如果这个点不符合上述条件,判断上面的点 //go up { if(a[px][py]==0) { if(check2(px,py,x2,y2)) return 1; } else { break; } } for(px=x1+1,py=y1;px<m;++px)//go down { if(a[px][py]==0) { if(check2(px,py,x2,y2))return 1; } else { break; } } for(px=x1,py=y1-1;py>0;--py)//go left { if(a[px][py]==0) { if(check2(px,py,x2,y2))return 1; } else { break; } } for(px=x1,py=y1+1;py<n;++py)//go right { if(a[px][py]==0) { if(check2(px,py,x2,y2))return 1; } else { break; } } return 0; }int main(){ while (scanf("%d%d",&m,&n)!=EOF) { if (0==m && 0==n) break; for (int i=1;i<=m;i++)//get for (int j=1;j<=n;j++) scanf("%d",&a[i][j]); scanf("%d",&q); while (q--) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); if ( ok(x1,y1,x2,y2) ) printf("YES\n"); else printf("NO\n"); } }return 0;}
0 0
- HDOJ1175连连看搜索
- HDOJ1175连连看
- HDOJ1175 连连看
- HDOJ1175 连连看(bfs)
- HDOJ1175 连连看(dfs)
- HDOJ1175连连看 DFS
- HDOJ1175 连连看
- hdoj1175 连连看
- HDOJ1175连连看
- HDOJ1175连连看的解题报告
- hdoj1175
- 连连看
- 连连看.
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 移动开发iOS&Android对比学习--异步处理
- mina学习基础-入门实例-传输定长报文(三)
- TDF8599C特性、参数介绍及TDF8599C样片申请指南
- [ubuntu] setup chrome
- apache与tomcat与weblogic对比
- HDOJ1175 连连看
- Linux网络编程-若干网络基本知识
- [leetcode] Path Sum II
- BFS
- POJ3304-Segments
- Linux网络编程-UDP
- 第二章 构架属于自己的WMTS服务,数据下载整合篇1
- SharedPreferences详解(三)——存取图片
- Android学习小Demo(21)ListView的联动选择