题目描述
耗子哥最近迷上了下象棋,但是他在下一种另类的象棋,他将棋子倒在了棋盘上,其中只有一个黑卒,他想尝试能不能用这个黑卒,在不更改其他棋子位置,不吃其他棋子,也不能从其他棋子上飞过的情况下,吃到红方的将棋。
象棋的棋盘大小为9*10共90个位置可以放棋子,棋子数量不限,黑卒的位置和红将的位置会标注出来。
输入描述:
输入包含9列10行数字,其中0表示上面没有棋子,1表示上面有其他棋子,2表示上面放的棋子是黑卒,3表示上面棋子是红将,题目保证一盘棋中只有一个黑卒和一个红将。
输出描述:
如果能够吃到红将,则输出yes,否则输出no。
样例输入
200000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000003
输出
yes
样例输入
200000000
000000000
000000000
000010000
000131000
000010000
000000000
000000000
000000000
000000000
输出
no
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 11;
char a[N][N];
bool b[N][N];
int r1,l1,r2,l2;
void dfs(int x,int y)
{
if(x < 1 || x > 10 || y < 1 || y > 9 || b[x][y] == true) return ;
if(a[x][y] != '1') b[x][y] = true;
if(b[x][y] == true)
{
dfs(x + 1,y);
dfs(x - 1,y);
dfs(x,y + 1);
dfs(x,y - 1);
}
}
int main()
{
for(int i = 1;i <= 10;i ++)
for(int j = 1;j <= 9;j ++)
cin >> a[i][j];
memset(b,false,sizeof b);
for(int i = 1;i <= 10;i ++)
for(int j = 1;j <= 9;j ++)
{
if(a[i][j] == '2') r1 = i,l1 = j;
if(a[i][j] == '3') r2 = i,l2 = j;
}
dfs(r1,l1);
if(b[r2][l2] == true) cout << "yes";
else cout << "no";
return 0;
}