写了382行我也是醉了。。。。不过很多部分只是粘贴而已,基本思路就是按照题目说的做
需要注意的是:
1.两组数据间一个空行
2.printf("Black -%3d White -%3d\n",B,W);要这么写;
3.在L命令下要这样输出空格 : if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
#include<stdio.h>
#include<string.h>
char s[20][20];
char ens[10],ans[10];
void LL(char b,char w){
int i,j,n,m,maxnn=0,AC=0;
for(i=1;i<=8;i++)
for(j=1;j<=8;j++){
if(s[i][j]=='-'){
if(s[i-1][j]==w){
int kase=0;
for(n=i-1;n>=1;n--){
if(s[n][j]!=w&&s[n][j]!=b)
break;
if(s[n][j]==b){
kase=1;break;
}
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i+1][j]==w){
int kase=0;
for(n=i+1;n<=8;n++){
if(s[n][j]!=w&&s[n][j]!=b)
break;
if(s[n][j]==b){
kase=1;break;
}
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i][j-1]==w){
int kase=0;
for(n=j-1;n>=1;n--){
if(s[i][n]!=w&&s[i][n]!=b)
break;
if(s[i][n]==b){
kase=1;break;
}
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i][j+1]==w){
int kase=0;
for(n=j+1;n<=8;n++){
if(s[i][n]!=w&&s[i][n]!=b)
break;
if(s[i][n]==b){
kase=1;break;
}
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i-1][j-1]==w){
int kase=0;m=j-1;
for(n=i-1;n>=1;n--){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;break;
}
m--;
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i+1][j+1]==w){
int kase=0;m=j+1;
for(n=i+1;n<=8;n++){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;break;
}
m++;
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i-1][j+1]==w){
int kase=0;m=j+1;
for(n=i-1;n>=1;n--){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;break;
}
m++;
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
if(s[i+1][j-1]==w){
int kase=0;m=j-1;
for(n=i+1;n<=8;n++){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;break;
}
m--;
}
if(kase!=0){
if(AC)
printf(" ");
AC=1;
printf("(%d,%d)",i,j);
maxnn++;
continue;
}
}
}
}
if(maxnn==0)
printf("No legal move.\n");
else printf("\n");
}
int MM(int r,int c,char b,char w){
int i,j,n,m,maxnn=0;
if(s[r][c]=='-'){
if(s[r-1][c]==w){
int kase=0,x,y;
for(n=r-1;n>=1;n--){
if(s[n][c]!=w&&s[n][c]!=b)
break;
if(s[n][c]==b){
kase=1;y=c;x=n+1;break;
}
}
if(kase!=0){
s[r][c]=b;
for(m=x;m<=r-1;m++)
s[m][c]=b;
maxnn++;
}
}
if(s[r+1][c]==w){
int kase=0,x,y;
for(n=r+1;n<=8;n++){
if(s[n][c]!=w&&s[n][c]!=b)
break;
if(s[n][c]==b){
kase=1;y=c;x=n-1;break;
}
}
if(kase!=0){
s[r][c]=b;
for(m=r+1;m<=x;m++)
s[m][c]=b;
maxnn++;
}
}
if(s[r][c-1]==w){
int kase=0,x,y;
for(n=c-1;n>=1;n--){
if(s[r][n]!=w&&s[r][n]!=b)
break;
if(s[r][n]==b){
kase=1;y=c;x=n+1;break;
}
}
if(kase!=0){
s[r][c]=b;
for(m=x;m<=c-1;m++)
s[r][m]=b;
maxnn++;
}
}
if(s[r][c+1]==w){
int kase=0,x,y;
for(n=c+1;n<=8;n++){
if(s[r][n]!=w&&s[r][n]!=b)
break;
if(s[r][n]==b){
kase=1;y=c;x=n-1;break;
}
}
if(kase!=0){
s[r][c]=b;
for(m=c+1;m<=x;m++)
s[r][m]=b;
maxnn++;
}
}
if(s[r+1][c+1]==w){
int kase=0,x,y;m=c+1;
for(n=r+1;n<=8;n++){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;x=n-1;y=m-1;break;
}
m++;
}
if(kase!=0){
s[r][c]=b;
m=c+1;
for(n=r+1;n<=x;n++){
s[n][m]=b;
m++;
}
maxnn++;
}
}
if(s[r-1][c-1]==w){
int kase=0,x,y;m=c-1;
for(n=r-1;n>=1;n--){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;x=n+1;y=m+1;break;
}
m--;
}
if(kase!=0){
s[r][c]=b;
m=y;
for(n=x;n<=r-1;n++){
s[n][m]=b;
m++;
}
maxnn++;
}
}
if(s[r-1][c+1]==w){
int kase=0,x,y;m=c+1;
for(n=r-1;n>=1;n--){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;x=n+1;y=m-1;break;
}
m++;
}
if(kase!=0){
s[r][c]=b;
m=y;
for(n=x;n<=r-1;n++){
s[n][m]=b;
m--;
}
maxnn++;
}
}
if(s[r+1][c-1]==w){
int kase=0,x,y;m=c-1;
for(n=r+1;n<=8;n++){
if(s[n][m]!=w&&s[n][m]!=b)
break;
if(s[n][m]==b){
kase=1;x=n-1;y=m+1;break;
}
m--;
}
if(kase!=0){
s[r][c]=b;
m=c-1;
for(n=r+1;n<=x;n++){
s[n][m]=b;
m--;
}
maxnn++;
}
}
}
if(maxnn==0)
return 0;
else return 1;
}
int main(){
int T,i,j,n,maxn=0;
scanf("%d",&T);
while(T--){
memset(s,'0',sizeof(s));
char s1[20];
if(maxn)
printf("\n");
maxn=1;
for(i=1;i<=8;i++){
scanf("%s",s1);
for(j=0;j<8;j++)
s[i][j+1]=s1[j];
}
scanf("%s",ens);
while(1){
scanf("%s",ans);
if(ans[0]=='L'){
char b,w;
b='B';w='W';
if(ens[0]=='B') LL(b,w);
else LL(w,b);
}
else if(ans[0]=='M'){
int r,c;
r=ans[1]-'0'; c=ans[2]-'0';
char b,w;
b='B';w='W';
if(ens[0]=='B'){
if(MM(r,c,b,w)!=0)
ens[0]='W';
else{
MM(r,c,w,b);
ens[0]='B';
}
}
else{
if(MM(r,c,w,b)!=0)
ens[0]='B';
else{
MM(r,c,b,w);
ens[0]='W';
}
}
int W=0,B=0;
for(i=1;i<=8;i++)
for(j=1;j<=8;j++){
if(s[i][j]=='W')
W++;
if(s[i][j]=='B')
B++;
}
printf("Black -%3d White -%3d\n",B,W);
}
else if(ans[0]=='Q')
break;
}
for(i=1;i<=8;i++)
for(j=1;j<=8;j++){
if(j==8)
printf("%c\n",s[i][j]);
else
printf("%c",s[i][j]);
}
}
return 0;
}