Ah quack quack (can be felt laughter)
When I hand it to open a malformed rather than wow, ah quack quack
This is the feeling of first love!
Why malformed Black -% 2d White -% 2d (% 2d !!!!)
thinking doom explosion touch it, do not just eight directions emmmmmm
first input and output functions written (heard of called top-down), engaged in function, not crash you win!
Details look at the code
#include <bits/stdc++.h>
using namespace std;
char s[10][10],w[10][10];//输出才改其余以0开始
int pan(char c,int &de,char q,int &ok,int &he)
{
if(c !='-' && c!=q)
{
de++; return 1;
}
else if(c == q && de)
{
ok++; he++;
}
return 0;
}
int okk(int x,int y,char q,int kk)//kk 0只找不改,1找到顺便改
{
//判断是否是真命天女 8方向......
//勿忘每次初始化!
memset(w,0,sizeof(w));
int ok = 0,de = 0,he = 0;
for (int j = y+1; j < 8; j++)
{
char c = s[x][j];
if(!pan(c,de,q,ok,he))
{
if(he)//如果可以找到标记一下下如果kk=1嘿嘿嘿~
{
for (int z = y+1; z < j;z++) w[x][z] = 1;
}
break;
}
}//you
de = 0,he = 0;
for (int j = y-1; j >= 0; j--)
{
char c = s[x][j];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = y-1; z > j; z--) w[x][z] = 1;
}
break;
}
}//zuo
de = 0,he = 0;
for (int i = x+1; i < 8;i++)
{
char c = s[i][y];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = x+1; z < i; z++) w[z][y] = 1;
}
break;
}
}//xia
de = 0,he = 0;
for (int i = x-1; i >= 0;i--)
{
char c = s[i][y];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = x-1; z > i; z--) w[z][y] = 1;
}
break;
}
}//shang
//四斜
de = 0,he = 0;
for (int i = 1; i < 8;i++)
{
if(x-i < 0 || y-i < 0) break;
char c = s[x-i][y-i];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = 1; z < i; z++) w[x-z][y-z] = 1;
}
break;
}
}
de = 0,he = 0;
for (int i = 1; i < 8;i++)
{
if(x+i >= 8 || y+i >= 8) break;
char c = s[x+i][y+i];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = 1; z < i; z++) w[x+z][y+z] = 1;
}
break;
}
}
de = 0,he = 0;
for (int i = 1; i < 8;i++)
{
if(x-i < 0 || y+i >= 8) break;
char c = s[x-i][y+i];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = 1; z < i; z++) w[x-z][y+z] = 1;
}
break;
}
}
de = 0,he = 0;
for (int i = 1; i < 8;i++)
{
if(x+i >= 8 || y-i < 0) break;
char c = s[x+i][y-i];
if(!pan(c,de,q,ok,he))
{
if(he)
{
for (int z = 1; z < i; z++) w[x+z][y-z] = 1;
}
break;
}
}
//如果要1
if(ok && kk)
{
for (int i = 0; i < 8;i++)
for (int j = 0; j < 8;j++)
{
if(w[i][j]) s[i][j] = s[i][j]=='W'?'B':'W';
}
} //统统标记改了!
if(!ok) return 0;
return 1;
}
void chao(char q)
{
int ok = 0;
for (int i = 0; i < 8;i++)
for (int j = 0; j < 8;j++)
{
if(s[i][j]=='-' && okk(i,j,q,0)) // free
{
if(!ok)
{
printf("(%d,%d)",i+1,j+1); ok = 1;
}
else
{
printf(" (%d,%d)",i+1,j+1);
}
}
}
if(!ok) printf("No legal move.");
printf("\n");
}
int main()
{
int t;
scanf("%d",&t);
for (int v = 0; v < t ;v++)
{
if(v) printf("\n");//每个之间要有空行
char q,buf[5];
memset(s,'\0',sizeof(s));
//initialize
for (int i = 0 ; i < 8 ;i++)
{
scanf("%s",s[i]);
}
scanf(" %c",&q);//前面空格同理防换行!
while(scanf("%s",buf))//用buf防换行完美!
{
if(buf[0]=='Q')
{
for (int i = 0; i < 8;i++)
printf("%s\n",s[i]);
break;
}//结束嘛
else if(buf[0]=='L') chao(q);//找有何人可寻机会也
else if(buf[0]=='M') //指定人找机会也
{
if( okk(buf[1]-'0'-1,buf[2]-'0'-1,q,1) );//-1因为存从0开始
else//找不到换人
{
q = (q=='B')?'W':'B';
okk(buf[1]-'0'-1,buf[2]-'0'-1,q,1);
}
s[buf[1]-'0'-1][buf[2]-'0'-1] = (q=='B')?'B':'W';
//找到了总给人家机会嘛,加上去
int b = 0,w = 0;
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
{
if(s[i][j]=='B') b++;
else if(s[i][j]=='W') w++;
}
//直接暴力找了,要什么花里胡哨的找规律
printf("Black - %2d White - %2d\n",b,w);//22222222222222
q = (q=='B')?'W':'B';
}
}
}
return 0;
}
Really ah quack quack A!