hdu 1175连连看
来源:互联网 发布:域名备案系统 编辑:程序博客网 时间:2024/05/24 07:14
http://acm.hdu.edu.cn/showproblem.php?pid=1175
思路:枚举一个和原点A横坐标或纵坐标相同的一个转折点B,根据目标点D和折点B得出另一个转折点C.
A-->B-->C-->D如果这条路通了,就可以消除了。
import java.util.Scanner;public class Main{ static int a[][]=new int[1005][1005],m,n,ex,ey; public static void main(String[] args) { Scanner in=new Scanner(System.in); int q,i,j,k,x1,y1,x2,y2,x,y,xx,yy,flag; while(in.hasNextInt()) { n=in.nextInt(); m=in.nextInt(); if(n==0&&m==0) break; for(i=0;i<n;i++) for(j=0;j<m;j++) a[i][j]=in.nextInt(); q=in.nextInt(); while(q--!=0) { x1=in.nextInt()-1; y1=in.nextInt()-1; ex=x2=in.nextInt()-1; ey=y2=in.nextInt()-1; if(a[x1][y1]!=a[x2][y2]||x1==x2&&y1==y2||a[x1][y1]==0||a[x2][y2]==0) {System.out.println("NO");continue;} flag=0; lab:for(i=0;i<n;i++) //转折点在行上 { if(i!=x1) { if(OK(x1,y1,i,y1)) //判断当前点能不能直达转折点 { //得到两个转折点 x=i; y=y1; xx=x; yy=y2; //x相同,y不同 if(OK(x,y,xx,yy)&&OK(xx,yy,x2,y2)) {flag=1;break lab;}//已配对 xx=x2; yy=y; //y相同,x不同 if(OK(x,y,xx,yy)&&OK(xx,yy,x2,y2)){flag=1;break lab;}//已配对 } } } lab1:for(j=0;j<m;j++) //转折点在列上 { if(j!=y1) { if(OK(x1,y1,x1,j)) { x=x1; y=j; xx=x; yy=y2; if(OK(x,y,xx,yy)&&OK(x2,y2,xx,yy)) {flag=1;break lab1;}//已配对 xx=x2; yy=y; //y相同,x不同 if(OK(x,y,xx,yy)&&OK(x2,y2,xx,yy)){flag=1;break lab1;}//已配对 } } } if(flag==1) System.out.println("YES"); else System.out.println("NO"); } } } public static boolean OK(int x1,int y1,int x2,int y2) { int t,i; if(x1==x2) { if(y1>y2) {t=y2; y2=y1; y1=t;} else t=y2; for(i=y1+1;i<y2;i++) { if(a[x1][i]!=0) return false; } if((x1!=ex||t!=ey)&&a[x1][t]!=0) return false; } if(y1==y2) { if(x1>x2) {t=x2; x2=x1; x1=t;}else t=x2; for(i=x1+1;i<x2;i++) if(a[i][y1]!=0) return false; if((t!=ex||y2!=ey)&&a[t][y2]!=0) return false; } return true; }}
- hdu 1175 连连看
- hdu 1175 连连看
- hdu 1175 连连看
- HDU 1175 连连看
- HDU 1175 ( 连连看 )
- hdu 连连看 1175
- hdu 1175 连连看
- hdu 1175连连看
- HDU 1175 连连看
- hdu 1175 连连看
- HDU 1175 连连看
- HDU 1175 连连看
- HDU 1175 连连看
- HDU 1175 连连看
- hdu 1175 连连看
- hdu 1175 连连看
- HDU-1175 连连看
- HDU 1175 连连看
- postgres源码解析篇1
- xp系统下更改PL2303 USB转串口线的COM端口号的方法
- 初识面向对象(成员变量和局部变量)
- Windows动态库管理(一)
- java中的成员变量和方法
- hdu 1175连连看
- 黑马程序员——异常
- 转的C++库资料
- 【源码】java中图片和Base64互相转换源码
- Java类加载原理解析
- [leetcode]Binary Tree Maximum Path Sum
- Xcode学习笔记---ViewController的相关说明
- mysql基础操作
- android 命令行输出日志