C++——黑白棋(落子)



黑白棋(落子)

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

经过前3题的热身相信大家已经对黑白棋有了一定的认识,下面我们来编写稍微复杂一点的模块。黑白棋并不像5子棋或者围棋一样可以在任意空白处下子,那么检测某个位置是否可以下子(如对规则还不是很了解,请参照前3题的规则介绍),也是我们黑白棋AI算法会经常调用的模块。下面需要同学们编写这一检测模块。

输入:

首先读入的是当前棋盘的状态,共8行,每行8个数字,1代表白棋,2代表黑棋,0代表为空格(未下子)。第9行有3个数字R C N,分别代表给定点的行、列还有所要下子的颜色。

输出:

输出对于这个位置是否可以落子,可以输出Yes,不可以则输出No.

输入样例:

 
  

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 2 0 0 0 0 1 2 2 2 0 0 0 0 0 2 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 1

输出样例:

 
  

Yes

#include

using namespace std;

int shang(); int xia(); int zuo(); int you(); int zuoshang(); int youshang(); int zuoxia(); int youxia();

int qipan[8][8]; int row,col,color;

int main() {  int i,j;

 for(i=0;i<8;i++)  {   for(j=0;j<8;j++)   {    cin>>qipan[i][j];   }  }  cin>>row;  cin>>col;  cin>>color;

    if(shang()||xia()||zuo()||you()||zuoshang()||youshang()||zuoxia()||youxia())  {   cout<<"Yes"<

 return 0; }

//判断向上方向是否可连线

int shang() {  int i,counter,flag;

 counter=1;  flag=0;

 for(i=row-1;i>=0;i--)  {   if(qipan[i][col]!=color&&qipan[i][col]!=0)   {    counter++;   }   else   {    break;   }  }  if(counter>1&&i>=0&&qipan[i][col]==color)  {   flag=1;  }  return(flag); }

//判断向下 int xia() {  int i,counter,flag;

 counter=1;  flag=0;

 for(i=row+1;i<8;i++)  {   if(qipan[i][col]!=color&&qipan[i][col]!=0)   {    counter++;   }   else   {    break;   }  }  if(counter>1&&i<8&&qipan[i][col]==color)  {   flag=1;  }  return(flag); }

//判断向左

int zuo() {  int i,counter,flag;

 counter=1;  flag=0;

 for(i=col-1;i>=0;i--)  {   if(qipan[row][i]!=color&&qipan[row][i]!=0)   {    counter++;   }   else   {    break;   }  }  if(counter>1&&i>=0&&qipan[row][i]==color)  {   flag=1;  }  return(flag); }

//判断向右

int you() {  int i,counter,flag;

 counter=1;  flag=0;

 for(i=col+1;i<8;i++)  {   if(qipan[row][i]!=color&&qipan[row][i]!=0)   {    counter++;   }   else   {    break;   }  }  if(counter>1&&i<8&&qipan[row][i]==color)  {   flag=1;  }  return(flag); }

//判断左上

int zuoshang() {  int i,j,counter,flag,flag1;

 counter=1;  flag=0;  flag1=0;

 for(i=row-1;i>=0;i--)  {   for(j=col-1;j>=0;j--)   {    if(row-i==col-j)    {     if(qipan[i][j]!=color&&qipan[i][j]!=0)           {             counter++;           }           else           {      flag1=1;               break;           }    }   }   if(flag1==1)   {    break;   }  }  if(counter>1&&i>=0&&j>=0&&qipan[i][j]==color)  {   flag=1;  }  return(flag); }

//判断右上

int youshang() {  int i,j,counter,flag,flag1;

 counter=1;  flag=0;  flag1=0;

 for(i=row-1;i>=0;i--)  {   for(j=col+1;j<8;j++)   {    if(row-i==j-col)    {     if(qipan[i][j]!=color&&qipan[i][j]!=0)           {             counter++;           }           else           {      flag1=1;               break;           }    }   }      if(flag1==1)      {    break;   }  }  if(counter>1&&i>=0&&j<8&&qipan[i][j]==color)  {   flag=1;  }  return(flag); }

//判断左下

int zuoxia() {  int i,j,counter,flag,flag1;

 counter=1;  flag=0;  flag1=0;

 for(i=row+1;i<8;i++)  {   for(j=col-1;j>=0;j--)   {    if(i-row==col-j)    {     if(qipan[i][j]!=color&&qipan[i][j]!=0)           {             counter++;           }           else           {      flag1=1;               break;           }    }   }   if(flag1==1)   {    break;   }  }  if(counter>1&&i<8&&j>=0&&qipan[i][j]==color)  {   flag=1;  }  return(flag); }

//判断右下

int youxia() {  int i,j,counter,flag,flag1;

 counter=1;  flag=0;  flag1=0;

 for(i=row+1;i<8;i++)  {   for(j=col+1;j<8;j++)   {    if(i-row==j-col)    {     if(qipan[i][j]!=color&&qipan[i][j]!=0)           {      counter++;           }           else           {      flag1=1;               break;           }    }   }    if(flag1==1)   {    break;   }  }  if(counter>1&&i<8&&j<8&&qipan[i][j]==color)  {   flag=1;  }  return(flag); }

你可能感兴趣的:(C++——黑白棋(落子))