ZPF0119 2017-05-19 12:44 采纳率: 100%
浏览 1031
已采纳

UVA220 黑白棋 WA。。求大神解答~~

#include "iostream"
#include
#include
#include
#include
#include "math.h"
using namespace std;
char qp[10][10]; //棋盘
int flag[10][10]; //标记可添加棋子的位置
char qz; //当前出子的颜色
char fz(char c) //调换棋子颜色
{
if(c=='B')
return 'W';
if(c=='W')
return 'B';
return '-';
}
void l() //可用位置
{
for(int i=1; i {
for(int j=1; j {
if(qp[i][j]=='-')
{
if(i-2>0&&qp[i-1][j]==fz(qz)&&qp[i-2][j]==qz)
{
flag[i][j]=1;
}
else if(i+2 {
flag[i][j]=1;
}
else if(j-2>0&&qp[i][j-1]==fz(qz)&&qp[i][j-2]==qz)
{
flag[i][j]=1;
}
else if(j+2 {
flag[i][j]=1;
}
else if(i-2>0&&j-2>0&&qp[i-1][j-1]==fz(qz)&&qp[i-2][j-2]==qz)
{
flag[i][j]=1;
}
else if(i-2>0&&j+2 {
flag[i][j]=1;
}
else if(i+20&&qp[i+1][j-1]==fz(qz)&&qp[i+2][j-2]==qz)
{
flag[i][j]=1;
}
else if(i+2<9&&j+2<9&&qp[i+1][j+1]==fz(qz)&&qp[i+2][j+2]==qz)
{
flag[i][j]=1;
}
}
}
}

}
void m() //添加棋子
{
l();
char x1,y1;
int x,y; //位置
int b=0,w=0; //黑棋个数 白棋个数
char c;
scanf("%c%c",&x1,&y1);
x = x1-'0';
y = y1-'0';
if(flag[x][y]) //棋子颜色可用
{
c = qz;
}
else //棋子颜色翻转
{
c = fz(qz);
}
qp[x][y] = c;
if(x-2>0&&qp[x-1][y]==fz(c)&&qp[x-2][y]==c)
{
qp[x-1][y]=c;
}
if(x+2 {
qp[x+1][y]=c;
}
if(y-2>0&&qp[x][y-1]==fz(c)&&qp[x][y-2]==c)
{
qp[x][y-1]=c;
}
if(y+2 {
qp[x][y+1]=c;
}
if(x-2>0&&y-2>0&&qp[x-1][y-1]==fz(c)&&qp[x-2][y-2]==c)
{
qp[x-1][y-1]=c;
}
if(x-2>0&&y+2 {
qp[x-1][y+1]=c;
}
if(x+20&&qp[x+1][y-1]==fz(c)&&qp[x+2][y-2]==c)
{
qp[x+1][y-1]=c;
}
if(x+2<9&&y+2<9&&qp[x+1][y+1]==fz(c)&&qp[x+2][y+2]==c)
{
qp[x+1][y+1]=c;
}
for(int i=1; i<9; i++)
{
for(int j=1; j<9; j++)
{
if(qp[i][j]=='W')
w++;
else if(qp[i][j]=='B')
b++;
}
}
printf("Black - %2d White - %2d\n",b,w);
}
int main()
{
//freopen("in.txt","r",stdin);
int num;
char command; //命令
scanf("%d",&num);
while(num--)
{
for(int i=1; i<9; i++)
{
getchar();
for(int j=1; j<9; j++)
scanf("%c",&qp[i][j]);
}
/*for(int i=1;i<9;i++){
for(int j=1;j<9;j++)
printf("%c",qp[i][j]);
printf("\n");
}*/
getchar();
scanf("%c",&qz);
while(1)
{
memset(flag,0,sizeof(flag));
getchar();
scanf("%c",&command);
if(command=='Q')
{
for(int i=1; i<9; i++)
{
for(int j=1; j<9; j++)
{
printf("%c",qp[i][j]);
}
printf("\n");
}
if(num != 0)
printf("\n");
break;
}
else if(command=='L') //可用位置
{
int lnum = 0,fl = 0;
l();
for(int i=1; i<9; i++)
{
for(int j=1; j<9; j++)
{
if(flag[i][j]){
if(fl==0)
printf("(%d,%d)",i,j);
else
printf(" (%d,%d)",i,j);
lnum++;fl++;
}
}
}
if(lnum == 0){
printf("No legal move.");
qz = fz(qz);
}
printf("\n");
}
else if(command=='M') //(x,y)添加棋子
{
m();
qz = fz(qz);
}
}
}
return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-05-19 16:31
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码