C++——黑白棋(基础模块)

来源:互联网 发布:mac怎么下载idea 编辑:程序博客网 时间:2024/05/15 17:12


黑白棋(基础模块)

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

描述:

相信大家对于黑白棋已经了如指掌了,下面我们来编写一些更有挑战性的模块。对于棋盘的某种状态来说,可能有很多处都可以下子,也可能只有一处,甚至无处下子。我们需要你编写程序计算对于将要下某种颜色当前棋盘状态共有多少处可以落子。

输入:

首先读入的是当前棋盘的状态,共8行,每行8个数字,1代表白棋,2代表黑棋,0代表为空格(未下子)。第9行有1个数字N代表将要下子的颜色。

输出:

出一个整数,代表共有多少处可以落子,如果无法落子则输出0.

输入样例:

0 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 1 2 0 0 00 0 0 2 1 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 01

输出样例:

4

#include<iostream>

using namespace std;

void init();int shang(int m,int n);int xia(int m,int n);int zuo(int m,int n);int you(int m,int n);int zuoshang(int m,int n);int youshang(int m,int n);int zuoxia(int m,int n);int youxia(int m,int n);

int qipan[8][8];int color;

int main(){ int i,j,counter;

 init();

 counter=0;

 for(i=0;i<8;i++) {  for(j=0;j<8;j++)  {   if(qipan[i][j]==color)   {    if(shang(i,j))    {     counter++;    }    if(xia(i,j))    {     counter++;    }    if(zuo(i,j))    {     counter++;    }    if(you(i,j))    {     counter++;    }             if(zuoshang(i,j))    {     counter++;    }          if(youshang(i,j))    {     counter++;    }       if(zuoxia(i,j))    {     counter++;    }    if(youxia(i,j))    {     counter++;    }   }  } } cout<<counter<<endl;}

void init(){ int i,j; for(i=0;i<8;i++) {  for(j=0;j<8;j++)  {   cin>>qipan[i][j];  } } cin>>color;}int shang(int m,int n){ int i,flag,temp; flag=0; temp=1; for(i=m-1;i>=0;i--) {  if(qipan[i][n]!=color&&qipan[i][n]!=0&&qipan[i][n]!=3)  {   temp++;  }  else  {   break;  } } if(temp>1&&i>=0&&qipan[i][n]==0) {  qipan[i][n]=3;  flag=1; } return(flag);}

int xia(int m,int n){ int i,flag,temp; flag=0; temp=1; for(i=m+1;i<8;i++) {  if(qipan[i][n]!=color&&qipan[i][n]!=0&&qipan[i][n]!=3)  {   temp++;  }  else  {   break;  } } if(temp>1&&i<8&&qipan[i][n]==0) {  qipan[i][n]=3;  flag=1; } return(flag);}

int zuo(int m,int n){ int i,flag,temp; flag=0; temp=1; for(i=m-1;i>=0;i--) {  if(qipan[m][i]!=color&&qipan[m][i]!=0&&qipan[m][i]!=3)  {   temp++;  }  else  {   break;  } } if(temp>1&&i>=0&&qipan[m][i]==0) {  qipan[m][i]=3;  flag=1; } return(flag);}

int you(int m,int n){ int i,flag,temp; flag=0; temp=1; for(i=n+1;i<8;i++) {  if(qipan[m][i]!=color&&qipan[m][i]!=0&&qipan[m][i]!=3)  {   temp++;  }  else  {   break;  } } if(temp>1&&i<8&&qipan[m][i]==0) {  qipan[m][i]=3;  flag=1; } return(flag);}

int zuoshang(int m,int n){ int i,j,flag,temp,flag1; flag=0; temp=1; flag1=0; for(i=m-1;i>=0;i--) {  for(j=n-1;j>=0;j--)  {   if(m-i==n-j)   {              if(qipan[i][j]!=color&&qipan[i][j]!=0&&qipan[i][j]!=3)              {             temp++;           }              else           {       flag1=1;             break;           }   }  }  if(flag1==1)  {   break;  } } if(temp>1&&i>=0&&j>=0&&qipan[i][j]==0) {  qipan[i][j]=3;  flag=1; } return(flag);}

int youshang(int m,int n){ int i,j,flag,temp,flag1; flag=0; temp=1; flag1=0; for(i=m-1;i>=0;i--) {  for(j=n+1;j<8;j++)  {   if(m-i==j-n)   {              if(qipan[i][j]!=color&&qipan[i][j]!=0&&qipan[i][j]!=3)              {             temp++;           }              else           {       flag1=1;             break;           }   }  }  if(flag1==1)  {   break;  } } if(temp>1&&i>=0&&j<8&&qipan[i][j]==0) {  qipan[i][j]=3;  flag=1; } return(flag);}

int zuoxia(int m,int n){ int i,j,flag,temp,flag1; flag=0; temp=1; flag1=0; for(i=m+1;i<8;i++) {  for(j=n-1;j>=0;j--)  {   if(i-m==n-j)   {              if(qipan[i][j]!=color&&qipan[i][j]!=0&&qipan[i][j]!=3)              {             temp++;           }              else           {       flag1=1;             break;           }   }  }  if(flag1==1)  {   break;  } } if(temp>1&&i<8&&j>=0&&qipan[i][j]==0) {  qipan[i][j]=3;  flag=1; } return(flag);}

int youxia(int m,int n){ int i,j,flag,temp,flag1; flag=0; temp=1; flag1=0; for(i=m+1;i<8;i++) {  for(j=n+1;j<8;j++)  {   if(i-m==j-n)   {              if(qipan[i][j]!=color&&qipan[i][j]!=0&&qipan[i][j]!=3)              {             temp++;           }              else           {       flag1=1;             break;           }   }  }  if(flag1==1)  {   break;  } } if(temp>1&&i<8&&j<8&&qipan[i][j]==0) {  qipan[i][j]=3;  flag=1; } return(flag);}

//写到深夜一点半也是很(。・∀・)ノ゙嗨呀~对不起我明天的高数离散,呜呜~

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老婆婚内出轨丈夫应该怎么办 微信小程序获取用户信息失败怎么办 拼多多砍价没有完成怎么办 微信人数上限了怎么办 微信5000人满了怎么办 微信朋友满了怎么办啊 失业金签到忘签怎么办 gec安全密码忘了怎么办 唯品会微信商城地址错怎么办跨省 电脑突然没网了怎么办 移动光猫只能连一台电脑怎么办 网上银行用户名和密码忘了怎么办 中国银行网银用户名忘了怎么办 中行企业网银证书过期怎么办 腾讯会员被别人登录了怎么办 微信限90天提现转帐功能怎么办? 星巴克券过期了怎么办 京东买面膜发个空包怎么办 手机低于4.4版本怎么办才能恢复 263云通信密码忘了怎么办 有信电话拉黑了怎么办 微信手机充值冲错了怎么办 国通石油卡怎么办红卡 善融商城有假货怎么办 中百购物卡丢了怎么办 cncbk被骗25万该怎么办 中银e贷额度冻结怎么办 招行抵押贷循环额度怎么办 小额钱袋被拒了怎么办 银行需要提供消费贷款发票怎么办 中银e贷款逾期怎么办 按揭房不想要了怎么办 房贷不想还了怎么办 融e借没有u盾怎么办 窗式空调声音大怎么办 瑞得卡过期了怎么办 对公账号转错了怎么办 中银e令丢了怎么办 中银e贷到期了怎么办 招行信用卡附属卡怎么办 华普超市购物卡怎么办