hdoj 1175 连连看
连连看
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 39496 Accepted Submission(s):
9797
玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能不能消去。现在你的任务就是写这个后台程序。
注意:询问之间无先后关系,都是针对当前状态的!
1 2 3 4
0 0 0 0
4 3 2 1
4
1 1 3 4
1 1 2 4
1 1 3 3
2 1 2 4
3 4
0 1 4 3
0 2 4 1
0 0 0 0
2
1 1 2 4
1 3 2 3
0 0
NO
NO
NO
NO
YES
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
#include<queue>
#include<string>
#include<cstring>
#include<map>
using namespace std;
#define N_MAX 1000+2
typedef long long ll;
int n,m;
int x,y,end_x,end_y;
int Map[N_MAX][N_MAX];
bool vis[N_MAX][N_MAX],flag=;
int dir_x[]={,,,-};
int dir_y[]={,-,,};
void dfs(int x,int y,int dir,int cnt){
if(cnt>)return;
if(flag==true)return;//剪枝
if(x==end_x&&y==end_y){flag=;return;}
if(cnt==&&!(x==end_x||y==end_y))return;
for(int i=;i<;i++){
int X=x+dir_x[i],Y=y+dir_y[i];
if(X>=&&X<n&&Y>=&&Y<m&&(Map[X][Y]==||X==end_x&&Y==end_y)&&!vis[X][Y]){
vis[X][Y]=true;
if(dir!=i){
if(dir==-)dfs(X,Y,i,cnt);
else dfs(X,Y,i,cnt+);
}
else{
dfs(X,Y,dir,cnt);
}
vis[X][Y]=false;
}
}
} int main() {
while(scanf("%d%d",&n,&m)&&n||m){
for(int i=;i<n;i++)
for(int j=;j<m;j++)
scanf("%d",&Map[i][j]);
int q;scanf("%d",&q);
while(q--){
scanf("%d%d%d%d",&x,&y,&end_x,&end_y);x--,y--,end_x--,end_y--;
if(Map[x][y]!=Map[end_x][end_y]){puts("NO");continue;}
if(Map[x][y]==||Map[end_x][end_y]==){puts("NO");continue;}
memset(vis,,sizeof(vis));flag=;
int tmp=Map[x][y];
Map[x][y]=;
dfs(x,y,-,);
Map[x][y]=tmp;
if(flag)puts("YES");
else puts("NO");
}
}
return ;
}
hdoj 1175 连连看的更多相关文章
- HDU 1175 连连看(超级经典的bfs之一)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others) ...
- 【HDOJ】1175 连连看
BFS.wa了一下午,原来是YES,写成了Yes. #include <iostream> #include <cstdio> #include <cstring> ...
- HDU 1175 连连看
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...
- HDU 1175 连连看(BFS)
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1175 连连看 DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 解题思路:从出发点开始DFS.出发点与终点中间只能通过0相连,或者直接相连,判断能否找出这样的路 ...
- Hdu 1175 连连看(DFS)
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 因为题目只问能不能搜到,没问最少要几个弯才能搜到,所以我采取了DFS. 因为与Hdu ...
- hdoj 1175 (bfs)
题意: 判断两点之间是否可以通过至多有两次转变方向以达到相连,就是平时玩的连连看游戏,但是不能从外面绕过去. 思路:bfs,给每个加入的队列的点添加转变方向次数turn和点当前要走的方向dir属性,起 ...
- HUD 1175 连连看
连连看 Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...
随机推荐
- java 实现猜数字游戏 随机给定一个数字,猜大小直到正确
package com.swift; import java.util.Random; import java.util.Scanner; public class GuessBigSmall { p ...
- 谭浩强 c++程序设计第一章课后习题 第7题
#include <iostream> using namespace std; int main() { int a,b,c; int f(int x,int y,int z);//这是 ...
- SPOJ2713GSS4 - Can you answer these queries IV(线段树)
题意 Sol 讲过无数次了..很显然,一个$10^12$的数开方不超过$8$次后就会变为$1$ 因此直接暴力更改即可,维护一下这段区间是否被全改为了$1$ 双倍经验:https://www.luogu ...
- SpringBoot之HelloWorld仔细分析
程序中的pom.xml文件: 一.父级标签 <parent> <groupId>org.springframework.boot</groupId> <art ...
- dataTable 自定义排序
$("#id").DataTable({ aaSorting: [0, 'desc'], // 默认排序 aoColumnDefs: [ { "bSortable&qu ...
- 认识mysql(4)
今日是MySQL的第四篇,难度会稍微加大,加油! 开始吧! 1.外键(foreign key) 1.定义:让当前表字段的值在另一个表的范围内选择 2.语法: foreign key(参考字段名) r ...
- centos7上基于kubernetes的docker集群管理
kubernetes和docker的作用这里就不作介绍了,直接进入主题. 本文的目的是搭建docker集群,并使用kubernetes管理它们. 文中的软件环境除了kubernetes和docker, ...
- 【Python学习之七】面向对象高级编程——使用@property
参考来自廖雪峰Python教程:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/ ...
- javascript sprintf方法
转载自: http://demon.tw/programming/javascript-sprintf.html function str_repeat(i, m) { for (var o = [] ...
- 对数据仓库Hive的一些认识
首先我们得明白什么是数据仓库? 数据仓库,英文名称为Data warehouse,可简写为DW或DWH.数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Supp ...