代码:
#include<iostream>
using namespace std;
char a[10][10],m;
int main() {
for(int i=0; i<8; i++)
for(int j=0; j<8; j++) {
cin>>a[i][j];
}
for(int i = 0 ; i < 8 ; i++) {
for(int j = 0 ; j < 8 ; j++) {
if(a[i][j] == 'R') {//R:车 , B:象
a[i][j] == '0';
for(int k = 0 ; k < 8; k++) {
if(a[k][j] =='B' || a[k][j] == 'R') continue;//我的思路:遇见字母则不覆盖,便于下一次查找
a[k][j] = '0';
}
for(int k = 0 ; k < 8; k++) {
if(a[i][k] =='B' || a[i][k] == 'R') continue;
a[i][k] = '0';
}
}
if(a[i][j]=='B') {
a[i][j] == '0';
// a[i-1][j-1] = a[i+1][j-1] = a[i-1][j+1] = a[i+1][j+1] = '0';
for(int k = 1 ; k <= 8; k++) {//for(1~8)
if(a[i-k][j-k] = '.') a[i-1][j-1] = '0';//判断数组越界的同时也判断了是否为车、象
if(a[i+k][j-k] = '.') a[i+1][j-1] = '0';
if(a[i-1][j+1] = '.') a[i-1][j+1] = '0';
if(a[i+1][j+1] = '.') a[i+1][j+1] = '0';
// a[i-1][j-1] = a[i+1][j-1] = a[i-1][j+1] = a[i+1][j+1] = '0';
}
}
}
}
for(int i = 0 ; i < 8 ; i++) {
for(int j = 0 ; j < 8 ; j++) {
if(a[i][j] == '.') cout << 1;
else cout << 0;
}
cout<<endl;
}
return 0;
//实地测试结果:车是没问题的,但象出bug了
/*
输入:
........
........
........
........
........
....B...
........
........
输出
11111111
11111111
11111111
11111111
11101011
11110111
11101011
11111111
输入
........
........
........
........
........
....R...
........
........
输出
11110111
11110111
11110111
11110111
11110111
00000000
11110111
11110111
输入
........
........
..R.....
.R..B...
........
....B...
........
........
输出
11011111
10111111
01000000
00100000
10001011
10110111
11001011
10111111
可以看出,象感染了周围一小片,甚至把本能正常运行的车给顶成了1
*/
}