C++——黑白棋(final)
来源:互联网 发布:mysql打印输出语句 编辑:程序博客网 时间:2024/05/16 07:01
黑白棋(final)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
下面我们来编写黑白棋的一个比较重要的模块,对于某个棋盘状态,我们将要下一个子时,最朴素的考虑就是我下了这个子后棋盘上我方颜色的子尽量的多(如果大家对于黑白棋有一定研究,会发现这样走并不优)。我们这里要求大家编程实现找出可以使我方下完一个子后,棋盘上的我方颜色的子最多的位置,如果有多个这样的位置,请输出行数和列数最小的(优先比较行号,如果行号相同再比较列号)。
输入:
首先读入的是当前棋盘的状态,共8行,每行8个数字,1代表白棋,2代表黑棋,0代表为空格(未下子)。第9行有1个数字N代表将要下子的颜色。
输出:
下子的行号和列号,中间用空格分隔开。如果无法落子,请输出Impossible
输入样例:
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
输出样例:
2 4
#include<iostream>
using namespace std;
void init();
void shang(int m,int n);
void xia(int m,int n);
void zuo(int m,int n);
void you(int m,int n);
void zuoshang(int m,int n);
void youshang(int m,int n);
void zuoxia(int m,int n);
void youxia(int m,int n);
int qipan[8][8];
int zuiduo[8][8]={0};
int color;
int main()
{
int i,j,k,temp;
int a[64]={0};
init();
k=0;
//遍历可能落子的地方,并将该点(i,j)处的落子后改变的棋子数与与该下棋同色并连线的棋子数之和储存到zuiduo[I][j];
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(qipan[i][j]==color)
{
shang(i,j);
xia(i,j);
zuo(i,j);
you(i,j);
zuoshang(i,j);
youshang(i,j);
zuoxia(i,j);
youxia(i,j);
}
}
}
//将落子后的棋子数放入a[64],方便比较棋数多少,找出最大值
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(zuiduo[i][j]!=0)
{
a[k]=zuiduo[i][j];
k++;
}
}
}
if(a[0]==0)
{
cout<<"Impossible"<<endl;
return 0;
}
else
{
//将最大值放入temp
temp=a[0];
for(i=1;i<k;i++)
{
if(a[i]>temp)
{
temp=a[i];
}
}
//找出最大值temp对应的棋盘坐标
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(temp==zuiduo[i][j])
{
cout<<i<<" "<<j<<endl;
return 0;
}
}
}
}
}
void init()
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
cin>>qipan[i][j];
}
}
cin>>color;
}
void shang(int m,int n)
{
int i,temp;
temp=1;
for(i=m-1;i>=0;i--)
{
if(qipan[i][n]!=color&&qipan[i][n]!=0)
{
temp++;
}
else
{
break;
}
}
if(temp>1&&i>=0)
{
zuiduo[i][n]+=temp;
}
}
void xia(int m,int n)
{
int i,temp;
temp=1;
for(i=m+1;i<8;i++)
{
if(qipan[i][n]!=color&&qipan[i][n]!=0)
{
temp++;
}
else
{
break;
}
}
if(temp>1&&i>=0)
{
zuiduo[i][n]+=temp;
}
}
void zuo(int m,int n)
{
int i,temp;
temp=1;
for(i=m-1;i>=0;i--)
{
if(qipan[m][i]!=color&&qipan[m][i]!=0)
{
temp++;
}
else
{
break;
}
}
if(temp>1&&i>=0)
{
zuiduo[m][i]+=temp;
}
}
void you(int m,int n)
{
int i,temp;
temp=1;
for(i=m+1;i<8;i++)
{
if(qipan[m][i]!=color&&qipan[m][i]!=0)
{
temp++;
}
else
{
break;
}
}
if(temp>1&&i>=0)
{
zuiduo[m][i]+=temp;
}
}
void zuoshang(int m,int n)
{
int i,j,flag,temp;
flag=0;
temp=1;
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)
{
temp++;
}
else
{
flag=1;
break;
}
}
}
if(flag==1)
{
break;
}
}
if(temp>1&&i>=0&&j>=0)
{
zuiduo[i][j]+=temp;
}
}
void youshang(int m,int n)
{
int i,j,flag,temp;
flag=0;
temp=1;
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)
{
temp++;
}
else
{
flag=1;
break;
}
}
}
if(flag==1)
{
break;
}
}
if(temp>1&&i>=0&&j<8)
{
zuiduo[i][j]+=temp;
}
}
void zuoxia(int m,int n)
{
int i,j,flag,temp;
flag=0;
temp=1;
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)
{
temp++;
}
else
{
flag=1;
break;
}
}
}
if(flag==1)
{
break;
}
}
if(temp>1&&i<8&&j>=0)
{
zuiduo[i][j]+=temp;
}
}
void youxia(int m,int n)
{
int i,j,flag,temp;
flag=0;
temp=1;
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)
{
temp++;
}
else
{
flag=1;
break;
}
}
}
if(flag==1)
{
break;
}
}
if(temp>1&&i<8&&j<8)
{
zuiduo[i][j]+=temp;
}
}
- C++——黑白棋(final)
- C++——黑白棋(向左)
- C++——黑白棋(右上)
- C++——黑白棋(落子)
- C++——黑白棋(连续子个数)
- C++——黑白棋(状态改变)
- C++——黑白棋(基础模块)
- C++——又是黑白棋
- 黑白棋 final
- UVA220 ——黑白棋(Othello)
- c语言图形小游戏(黑白棋)
- C黑白棋
- 黑白棋 C语言
- 黑白棋代码——完结版
- 黑白棋(game)
- 枚举(黑白棋)
- 黑白棋(博弈论)
- 黑白棋(落子)
- 链表、队列、栈的相关应用(二)链式A+B
- SpringMVC 之 处理数据模型
- Pig Latin
- linux 卸载 mysql
- SpringBoot开发案例之整合Dubbo提供者(一)
- C++——黑白棋(final)
- nexus的仓库介绍,以及配置远程仓库
- Unix/Linux下的/etc目录
- bat批处理制作一键部署mysql、Tomcat应用
- Linux——高级网络控制
- 联合
- java使用POI读取excel文件,兼容xls和xlsx
- 关于CPU、指令集、架构、芯片概述
- 【备忘】Java菜鸟到大牛学习路线之高级篇