📄 200630690214.cpp
字号:
#include"stdio.h"
int board[15][15]={0}; //假设1为己方的棋子,-1是对手下的棋子,未下子的地方为0
int max[8]={0}; //分别存储我方和对方棋形表4个方向的权值
int a[8]={0},b[8]={0}; //a[8]存储双方4个方向权值最大的点的横坐标,b[8]为纵坐标
int maxm[3]={0}; //数组maxm分别存储权值最大的点的权值、横坐标以及纵坐标
int dre_across[15][15]={0},dre_across2[15][15]={0}; //横方向权值存储数组
int dre_up[15][15]={0},dre_up2[15][15]={0}; //竖方向权值存储数组
int dre_ld[15][15]={0},dre_ld2[15][15]={0}; //左斜方向权值存储数组
int dre_rd[15][15]={0},dre_rd2[15][15]={0}; //右斜方向权值存储数组
void ch_list1()
{ //对方棋形表
int x,y,j,k;
for(x=0;x<15;x++) //横方向
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=x-1;j>=0;j--) //向左搜索
{
if(board[j][y]==-1) p++; //单个方向权值计算
else break;
}
for(j=x+1;j<15;j++) //向右搜索
{
if(board[j][y]==-1) q++;
else break;
}
dre_across[x][y]=p+q; //横方向总权值计算
}
}
//竖方向
for(x=0;x<15;x++)
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=y-1;j>=0;j--) //向上搜索
{
if(board[x][j]==-1) p++;
else break;
}
for(j=y+1;j<15;j++) //向下搜索
{
if(board[x][j]==-1) q++;
else break;
}
dre_up[x][y]=p+q;
}
}
//左斜方向
for(x=0;x<15;x++)
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=x-1,k=y-1;(j>=0&&k>=0);j--,k--) //左斜向上搜索
{
if(board[j][k]==-1) p++;
else break;
}
for(j=x+1,k=y+1;(j<15&&k<15);j++,k++) //左斜向下搜索
{
if(board[j][k]==-1) q++;
else break;
}
dre_ld[x][y]=p+q;
}
}
//右斜方向
for(x=0;x<15;x++)
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=x-1,k=y+1;(j>=0&&k<15);j--,k++) //右斜向下搜索
{
if(board[j][k]==-1) p++;
else break;
}
for(j=x+1,k=y-1;(j<15&&k>=0);j++,k--) //右斜向上搜索
{
if(board[j][k]==-1) q++;
else break;
}
dre_rd[x][y]=p+q;
}
}
}
void ch_list2()
{ //我方的棋形表 ,搜索过程同上面的对方搜索过程一样
int x,y,j,k; //并计算每个方向的权值,存放到数组max[8]中
for(x=0;x<15;x++) //横方向
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=x-1;j>=0;j--)
{
if(board[j][y]==1) p++;
else break;
}
for(j=x+1;j<15;j++)
{
if(board[j][y]==1) q++;
else break;
}
dre_across2[x][y]=p+q;
}
}
//竖方向
for(x=0;x<15;x++)
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=y-1;j>=0;j--)
{
if(board[x][j]==1) p++;
else break;
}
for(j=y+1;j<15;j++)
{
if(board[x][j]==1) q++;
else break;
}
dre_up2[x][y]=p+q;
}
}
//左斜方向
for(x=0;x<15;x++)
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=x-1,k=y-1;(j>=0&&k>=0);j--,k--)
{
if(board[j][k]==1) p++;
else break;
}
for(j=x+1,k=y+1;(j<15&&k<15);j++,k++)
{
if(board[j][k]==1) q++;
else break;
}
dre_ld2[x][y]=p+q;
}
}
//右斜方向
for(x=0;x<15;x++)
for(y=0;y<15;y++)
{
int p=0,q=0;
if(board[x][y]==0)
{
for(j=x+1,k=y-1;(j<15&&k>=0);j++,k--)
{
if(board[j][k]==1) p++;
else break;
}
for(j=x-1,k=y+1;(j>=0&&k<15);j--,k++)
{
if(board[j][k]==1) q++;
else break;
}
dre_rd2[x][y]=p+q;
}
}
}
void compare(){ //对方比较大小
int x,y,i;
max[0]=dre_across[0][0]; //横方向比较
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_across[x][y]>=max[0])
{
max[0]=dre_across[x][y];
a[0]=x; //横坐标存储到数组a中
b[0]=y; //纵坐标存储到数组b中
}
max[1]=dre_up[0][0]; //竖方向比较
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_up[x][y]>=max[1])
{
max[1]=dre_up[x][y];
a[1]=x;
b[1]=y;
}
max[2]=dre_ld[0][0]; //左斜方向比较
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_ld[x][y]>=max[2])
{
max[2]=dre_ld[x][y];
a[2]=x;
b[2]=y;
}
max[3]=dre_rd[0][0]; //右斜方向比较
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_rd[x][y]>=max[3])
{
max[3]=dre_rd[x][y];
a[3]=x;
b[3]=y;
} //我方比较大小,比较过程同对方比较过程一样
max[4]=dre_across2[0][0];
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_across2[x][y]>max[4])
{
max[4]=dre_across2[x][y];
a[4]=x;
b[4]=y;
}
max[5]=dre_up2[0][0];
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_up2[x][y]>max[5])
{
max[5]=dre_up2[x][y];
a[5]=x;
b[5]=y;
}
max[6]=dre_ld2[0][0];
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_ld2[x][y]>max[6])
{
max[6]=dre_ld2[x][y];
a[6]=x;
b[6]=y;
}
max[7]=dre_rd2[0][0];
for(x=0;x<15;x++)
for(y=0;y<15;y++)
if(dre_rd2[x][y]>max[7])
{
max[7]=dre_rd2[x][y];
a[7]=x;
b[7]=y;
}
maxm[0]=max[0]; //给数组maxm赋初值
for(i=0;i<8;i++)
{
if(max[i]>=maxm[0])
{
maxm[0]=max[i];
maxm[1]=a[i]; //存储最大权值点的横、
maxm[2]=b[i]; //纵坐标
}
if((maxm[1]==0)||(maxm[2]==0))
{
for(x=4;x<13;x++)
for(y=4;y<13;y++)
if(board[x][y]==0)
{
maxm[1]=x;
maxm[2]=y;
}
}
else if((maxm[1]==14)||(maxm[2]==14))
{
for(x=4;x<13;x++)
for(y=4;y<13;y++)
if(board[x][y]==0)
{
maxm[1]=x;
maxm[2]=y;
}
}
}
printf("\n");
printf("%d,%d\n",maxm[1],maxm[2]); //打印下子点的坐标
}
void main()
{
int x,y,n,t,SWITCH;
scanf("%d",&n);
if(n==0)
printf("7,7\n");
else if(n==1)
printf("6,6\n");
else if(n%2==0)
SWITCH=1; //SWITCH表示交换下子权
else
SWITCH=-1;
for(t=0;t<n;t++)
{
scanf("%d,%d",&x,&y);
if(SWITCH==1)
{
board[x][y]=1;;SWITCH=-1;
}
else if(SWITCH==-1)
{
board[x][y]=-1;SWITCH=1;
}
}
ch_list1();
ch_list2();
compare();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -