2019-8-25
这道题一直在WA,没有通过,先占个坑,日后再改。
附WA代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[10][10];
int black[65];
int white[65];
char c,myplayer;
int n,i,j,bi,wi;
char s[5];
int canset[65];
int id;
//左右上下 左上 左下 右上 右下
int dir[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{1,-1},{-1,1},{1,1}};
int book[9][9];
char player[2];
void tongji();
void operate();
int main()
{
player[0]='W';
player[1]='B';
cin>>n;
getchar();
memset(a,0,sizeof(a));
for(int w=0;w<n;w++)
{
for(i=1;i<=8;i++)
{
j=1;
while((c=getchar())!='\n')
{
a[i][j++]=c;
}
}
cin>>myplayer;
if(myplayer=='W'){id=0;}
else {id=1;}
while(cin>>s)
{
if(!strcmp(s,"Q"))
{
for(i=1;i<=8;i++)
{for(j=1;j<=8;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
if(w!=n-1)
{cout<<endl;}
break;
}
else
{
operate();
}
}
getchar();
}
return 0;
}
void tongji()
{
memset(white,0,sizeof(white));
memset(black,0,sizeof(black));
wi=0;
bi=0;
for(int x1=1;x1<=8;x1++)
for(int x2=1;x2<=8;x2++)
{
if(a[x1][x2]=='W')
{
white[wi++]=(x1-1)*8+x2;
}
if(a[x1][x2]=='B')
{
black[bi++]=(x1-1)*8+x2;
}
}
}
void operate()
{
int newx,newy;
int setx,sety;
int d;
int tim;
int num=0;
int flag;
int numblack;
int numwhite;
int var;
memset(canset,0,sizeof(canset));
memset(book,0,sizeof(book));
d=0;
tongji();
for(int k=0;;k++)
{
if(id==0){var=white[k];}
else {var=black[k];}
if(var==0){break;}
for(int b=0;b<8;b++)
{
tim=0;
newx=(var-1)/8+1;
newy=var-8*(newx-1);
while(1)
{
newx=newx+dir[b][0];
newy=newy+dir[b][1];
tim++;
if(newx<=0||newx>=9||newy<=0||newy>=9)
{
break;
}
if(book[newx][newy]){break;}
if(a[newx][newy]==player[id]||((a[newx][newy]=='-')&&tim==1))
{
break;
}
else if((a[newx][newy]=='-'))
{
canset[d++]=(newx-1)*8+newy;
book[newx][newy]=1;
break;
}
}
}
}
if(!strcmp(s,"L"))
{
if(d==0)
{
cout<<"No legal move."<<endl;
}
else{
sort(canset,canset+65);
for(int e=0;;e++)
{
if(canset[e]!=0)
{
num++;
if(num==1)
{
cout<<"("<<((canset[e]-1)/8+1)<<","<<(canset[e]-((canset[e]-1)/8)*8)<<")";
}
else
{
cout<<" ("<<((canset[e]-1)/8+1)<<","<<(canset[e]-((canset[e]-1)/8)*8)<<")";
}
}
if(num==d)
{
break;
}
}
cout<<endl;
}
}
else if(s[0]=='M')
{
setx=s[1]-'0';
sety=s[2]-'0';
if(!book[setx][sety])
{
id=1-id;
}
a[setx][sety]=player[id];
for(int b=0;b<8;b++)
{
tim=0;
flag=0;
newx=setx;
newy=sety;
while(1)
{
newx=newx+dir[b][0];
newy=newy+dir[b][1];
tim++;
if(newx<=0||newx>=9||newy<=0||newy>=9)
{
break;
}
if(a[newx][newy]=='-'&&tim==1)
{
break;
}
if(a[newx][newy]==player[id])
{
flag=1;
break;
}
}
if(flag==1)
{
newx=setx;
newy=sety;
while(1)
{
newx=newx+dir[b][0];
newy=newy+dir[b][1];
if(newx<=0||newx>=9||newy<=0||newy>=9)
{
break;
}
if(a[newx][newy]==player[id])
{
break;
}
else
{
a[newx][newy]=player[id];
}
}
}
}
id=1-id;
numblack=0;
numwhite=0;
for(int ma=1;ma<=8;ma++)
for(int col=1;col<=8;col++)
{
if(a[ma][col]=='B')
{
numblack++;
}
if(a[ma][col]=='W')
{
numwhite++;
}
}
printf("Black -%3d White -%3d\n",numblack,numwhite);
}
}