过了udebug的所有数据以及各种数据但是就是wa不知道为什么 哎
只能先放着了 以后再来写写看把
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node
{
int x,y;
}num[111],num1[111];
int m1[8]={1,1,0,-1,-1,-1,0,1};
int m2[8]={0,1,1,1,0,-1,-1,-1};
bool judge(int x,int y)
{
if(x>=1&&x<=8&&y>=1&&y<=8)
return true;
return false;
}
bool cmp(struct node a,struct node b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
char map[10][10];
int map1[10][10];
int xuan;
int L(int fg)
{
int ans=0;
memset(map1,0,sizeof(map1));
int cont=0;
if(xuan==0)
{
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
if(map[i][j]=='W')
{
int x1,y1;
for(int m=0;m<8;m++)
{
int fg1=0;
x1=i+m1[m];
y1=j+m2[m];
while(judge(x1,y1)&&map[x1][y1]=='B')
{
fg1=1;
x1+=m1[m];
y1+=m2[m];
}
if(judge(x1,y1)&&fg1==1&&map[x1][y1]=='-'&&map1[x1][y1]==0)
{
map1[x1][y1]=1;
num[cont].x=x1;
num[cont].y=y1;
cont++;
}
}
}
}
}
}
else if(xuan==1)
{
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
if(map[i][j]=='B')
{
int x1,y1;
for(int m=0;m<8;m++)
{
int fg1=0;
x1=i+m1[m];
y1=j+m2[m];
while(judge(x1,y1)&&map[x1][y1]=='W')
{
fg1=1;
x1+=m1[m];
y1+=m2[m];
}
if(judge(x1,y1)&&fg1==1&&map[x1][y1]=='-'&&map1[x1][y1]==0)
{
map1[x1][y1]=1;
num[cont].x=x1;
num[cont].y=y1;
cont++;
}
}
}
}
}
}
//cout<<"!!!"<<cont<<endl;
if(cont==0)
{
if(fg==0)
cout<<"No legal move."<<endl;
ans=0;
}
else
{
ans=1;
if(fg==0)
{
sort(num,num+cont,cmp);
for(int i2=0;i2<cont;i2++)
{
if(i2==0)
cout<<"("<<num[i2].x<<","<<num[i2].y<<")";
else
cout<<" ("<<num[i2].x<<","<<num[i2].y<<")";
}
cout<<endl;
}
}
return ans;
}
int main()
{
//freopen("out.txt","w",stdout);
int n;
cin>>n;
int fff=0;
while(n--)
{
if(fff!=0)
cout<<endl;
memset(map,'\0',sizeof(map));
for(int i=1;i<=8;i++)
{
getchar();
for(int j=1;j<=8;j++)
{
cin>>map[i][j];
}
}
char str;
while(1)
{
getchar();
cin>>str;
if(str=='Q')
{
fff++;
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
cout<<map[i][j];
}
cout<<endl;
}
break;
}
else if(str=='W')
{
xuan=0;
continue;
}
else if(str=='B')
{
xuan=1;
continue;
}
else if(str=='L')
{
int LL=L(0);
}
else if(str=='M')
{
int pp=L(1);
if(pp==0)
{
if(xuan==0)
xuan=1;
else if(xuan==1)
xuan=0;
}
char s[2];
scanf("%s",s);
//puts(s);
int x1,y1;
x1=s[0]-'0';
y1=s[1]-'0';
if(xuan==0)
{
map[x1][y1]='W';
int cont2=0;
for(int i=0;i<8;i++)
{
int x2,y2;
x2=x1+m1[i];
y2=y1+m2[i];
int fg2=0;
while(judge(x2,y2)&&map[x2][y2]=='B')
{
fg2=1;
num1[cont2].x=x2;
num1[cont2].y=y2;
x2+=m1[i];
y2+=m2[i];
//cout<<x2<<"!@#"<<y2<<endl;
cont2++;
}
if(judge(x2,y2)&&fg2==1&&map[x2][y2]=='W')
{
for(int i1=0;i1<cont2;i1++)
{
//cout<<"!!!"<<num1[i1].x<<"!!"<<num1[i1].y<<endl;
map[num1[i1].x][num1[i1].y]='W';
}
}
else
cont2=0;
}
xuan=1;
int a1=0;
int b1=0;
for(int j1=1;j1<=8;j1++)
{
for(int j2=1;j2<=8;j2++)
{
if(map[j1][j2]=='B')
a1++;
else if(map[j1][j2]=='W')
b1++;
}
}
printf("Black - %2d White - %2d\n",a1,b1);
}
else if(xuan==1)
{
map[x1][y1]='B';
int cont2=0;
for(int i=0;i<8;i++)
{
int x2,y2;
x2=x1+m1[i];
y2=y1+m2[i];
int fg2=0;
while(judge(x2,y2)&&map[x2][y2]=='W')
{
fg2=1;
num1[cont2].x=x2;
num1[cont2].y=y2;
x2+=m1[i];
y2+=m2[i];
cont2++;
}
if(judge(x2,y2)&&fg2==1&&map[x2][y2]=='B')
{
for(int i1=0;i1<cont2;i1++)
{
map[num1[i1].x][num1[i1].y]='B';
}
}
else
cont2=0;
}
xuan=0;
int a1=0;
int b1=0;
for(int j1=1;j1<=8;j1++)
{
for(int j2=1;j2<=8;j2++)
{
if(map[j1][j2]=='B')
a1++;
else if(map[j1][j2]=='W')
b1++;
}
}
printf("Black - %2d White - %2d\n",a1,b1);
}
}
}
}
return 0;
}