配对游戏(中二羊)
配对游戏(game.cpp)
题目
【题目描述】
ZEY在玩一个电脑游戏,这个游戏由一个
小W同学在-旁观看了整个游戏过程,然后提出新的规则:对于两个相同的图案,从一个图案开始画一条线连接另-个图案,这条线:
(1)只能往上下左右方向走;
(2)只能经过空白的格子;
(3)不能超出棋盘边界;
(4)只能转2次弯。
只有找到连线方法才能消除格子。ZEY顿时觉得智商不够用了,于是ZEY希望能用程序解决这个问题。
现在给出这个
【输入说明】
输入文件名为game.in
。输入为多行
第一行输入两个整数
接下来
接下来一行输入一个整数
接下来
【输出说明】
输出文件名为game.out
。
输出
输入样例1:
2 2
1 0
0 1
1
1 1 2 2
输出样例1:
YES
输入样例2:
3 4
1 0 2 3
2 0 0 4
3 4 0 1
2
1 3 2 1
1 1 3 4
输出样例2:
YES
NO
【样例说明】
这里只说明样例2:对于第一个坐标对,从
【数据范围】
对于
对于
题解
一个简单的深搜
代码:
#include<cstdio>
#include<cstring>
int m,n,kkk[1005][1005],x1,y1,x2,y2,hx[]={0,1,-1,0,0},zy[]={0,0,0,1,-1},fx[]={0,1,2,3,4};
bool pd[1005][1005],sb;
void dfs(int x,int y,int from,int fn){
if(x<0||y<0||x>n||y>m||(kkk[x][y]&&kkk[x][y]!=kkk[x2][y2])||pd[x][y]||sb||fn>2||(fn==2&&x-x2&&y-y2))return;
if(x==x2&&y==y2&&from){sb=true;return;}
pd[x][y]=true;
for(register int i(1);i<=4;i=-~i){
if(from!=fx[i]&&from)dfs(x+hx[i],y+zy[i],fx[i],fn+1);
else dfs(x+hx[i],y+zy[i],fx[i],fn);
}
pd[x][y]=false;
}
signed main(){
int p;
scanf("%d%d",&n,&m);
for(register int i(1);i<=n;i=-~i)
for(register int j(1);j<=m;j=-~j)scanf("%d",&kkk[i][j]);
scanf("%d",&p);
while(p--){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(kkk[x1][y1]!=kkk[x2][y2]||!kkk[x1][y1]||!kkk[x2][y2]){
puts("NO");
continue;
}
sb=false;
memset(pd,false,sizeof(pd));
dfs(x1,y1,0,0);
if(sb)puts("YES");
else puts("NO");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现