黑白棋(状态改变)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
相信大家已经对黑白棋很熟悉了,下面我们来编写一个状态转移的模块。即当你下完一个子后,棋盘的状态会发成相应的改变,这里我们需要你输出棋盘改变后的状态。
输入:
对于本题,首先读入的是当前棋盘的状态,共8行,每行8个数字,1代表白棋,2代表黑棋,0代表为空格(未下子)。第9行有3个数字R C N,分别代表下子的行、列还有所要下子的颜色。
输出:
输出下完子后棋盘的状态,输出共8行,数字两两直接请加入一个空格(注意:行尾无空格)。
输入样例:
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
输出样例:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 1 2 0 0 0 0 1 2 1 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
#include<iostream>
using namespace std;
void shang(); void xia(); void zuo(); void you(); void zuoshang(); void youshang(); void zuoxia(); void 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>>col>>color;
shang(); xia(); zuo(); you(); zuoshang(); youshang(); zuoxia(); youxia(); qipan[row][col]=color; for(i=0;i<8;i++) { for(j=0;j<8;j++) { cout<<qipan[i][j]; if(j<7) { cout<<" "; } } cout<<endl; } return 0; }
void shang() { int temp,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) { temp=i; flag=1; } if(flag==1) { for(i=row-1;i>temp;i--) { qipan[i][col]=color; } } } void xia() { int temp,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) { temp=i; flag=1; } if(flag==1) { for(i=row+1;i<temp;i++) { qipan[i][col]=color; } } }
void zuo() { int temp,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) { temp=i; flag=1; } if(flag==1) { for(i=col-1;i>temp;i--) { qipan[row][i]=color; } } }
void you() { int temp,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) { temp=i; flag=1; } if(flag==1) { for(i=col+1;i<temp;i++) { qipan[row][i]=color; } } }
void zuoshang() { int temp1,temp2,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) { temp1=i; temp2=j; flag=1; } if(flag==1) { for(i=row-1;i>temp1;i--) { for(j=col-1;j>temp2;j--) { if(row-i==col-j) { qipan[i][j]=color; } } } } }
void youshang() { int temp1,temp2,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) { temp1=i; temp2=j; flag=1; } if(flag==1) { for(i=row-1;i>temp1;i--) { for(j=col+1;j<temp2;j++) { if(row-i==j-col) { qipan[i][j]=color; } } } } }
void zuoxia() { int temp1,temp2,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) { temp1=i; temp2=j; flag=1; } if(flag==1) { for(i=row+1;i<temp1;i++) { for(j=col-1;j>temp2;j--) { if(i-row==col-j) { qipan[i][j]=color; } } } } }
void youxia() { int temp1,temp2,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) { temp1=i; temp2=j; flag=1; } if(flag==1) { for(i=row+1;i<temp1;i++) { for(j=col+1;j<temp2;j++) { if(i-row==j-col) { qipan[i][j]=color; } } } } }