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

来源:互联网 发布:微信载入数据失败 编辑:程序博客网 时间:2024/04/30 07:57


黑白棋(落子)

时限: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 00 0 0 0 0 0 1 00 0 0 2 0 2 0 00 0 1 2 2 2 0 00 0 0 2 1 0 0 00 0 0 2 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 02 4 1

输出样例:

Yes

#include<iostream>

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"<<endl; } else {  cout<<"No"<<endl; }

 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);}

原创粉丝点击