1.
Monocarp正在玩电脑游戏。现在他想完成这个游戏的第一个关卡。
level是一个2行n列的矩形网格。Monocarp控制一个字符,该字符从单元格(1,1)开始,位于第1行和第1列的交点。
如果单果皮细胞相邻或相邻,单果皮的性状可以一步一步地从一个细胞移动到另一个细胞。形式上,如果|x1−x2|≤1和|y1−y2|≤1,则可以一步从单元格(x1,y1)移动到单元格(x2,y2)。很明显,禁止走出电网。
有些细胞中有陷阱。如果Monocarp的角色发现自己在这样一个牢房里,他就会死,游戏也就结束了。
要完成一个关卡,Monocarp的字符应该到达单元格(2,n) -在第2行和第n列的交叉处。
帮助Monocarp确定是否有可能完成关卡。
Input
输入
第一行包含一个整数t(1≤t≤100)-测试用例的数量。接下来是测试用例。每个测试用例由三行组成。 第一行包含单个整数n(3≤n≤100)—列数。
接下来的两行描述关卡。这些行中的第i行描述关卡的第i行——该行由字符“0”和“1”组成。字符'0'对应一个安全单元格,字符'1'对应一个陷阱单元格。
对输入的附加约束:单元格(1,1)和(2,n)是安全的。
Output
对于每个测试用例,如果能够完成关卡,则输出YES,否则输出NO。
Example
Input
4 3 000 000 4 0011 1100 4 0111 1110 6 010101 101010
Output
YES YES NO YES
Note
考虑语句中的例子。
在第一个测试用例中,可能的路径之一是(1,1)→(2,2)→(2,3)。
在第二个测试用例中,可能的路径之一是(1,1)→(1,2)→(2,3)→(2,4)。
在第四个测试用例中,可能的路径之一是(1,1)→(2,2)→(1,3)→(2,4)→(1,5)→(2,6)。
思路:运用广搜
代码:
#include<stdio.h>
char a[200][200];
int x,y,m,flag,book[200][200];
void dfs()
{
int tx,ty,k=0;
int z[5][2]={{1,1},{0,1},{-1,1}};
for(k=0;k<3;k++)
{
tx=x+z[k][0];
ty=y+z[k][1];
if(tx<0||tx>1||ty<0||ty>m-1||a[tx][ty]=='1')
continue;
if(a[tx][ty]=='0'&&book[tx][ty]==0)
{
x=tx;
y=ty;
if(tx==1&&ty==m-1)
{
flag=1;
break;
}
else
dfs();
}
}
}
int main()
{
int i,j,n;
scanf("%d",&n);
while(n--)
{
flag=0;
scanf("%d",&m);
for(i=0;i<2;i++)
scanf("%s",a[i]);
getchar();
x=0,y=0;
book[0][0]=1;
dfs();
if(flag==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}