?? 200630690214.cpp
字號(hào):
#include"stdio.h"
int board[15][15]={0}; //假設(shè)1為己方的棋子,-1是對(duì)手下的棋子,未下子的地方為0
int max[8]={0}; //分別存儲(chǔ)我方和對(duì)方棋形表4個(gè)方向的權(quán)值
int a[8]={0},b[8]={0}; //a[8]存儲(chǔ)雙方4個(gè)方向權(quán)值最大的點(diǎn)的橫坐標(biāo),b[8]為縱坐標(biāo)
int maxm[3]={0}; //數(shù)組maxm分別存儲(chǔ)權(quán)值最大的點(diǎn)的權(quán)值、橫坐標(biāo)以及縱坐標(biāo)
int dre_across[15][15]={0},dre_across2[15][15]={0}; //橫方向權(quán)值存儲(chǔ)數(shù)組
int dre_up[15][15]={0},dre_up2[15][15]={0}; //豎方向權(quán)值存儲(chǔ)數(shù)組
int dre_ld[15][15]={0},dre_ld2[15][15]={0}; //左斜方向權(quán)值存儲(chǔ)數(shù)組
int dre_rd[15][15]={0},dre_rd2[15][15]={0}; //右斜方向權(quán)值存儲(chǔ)數(shù)組
void ch_list1()
{ //對(duì)方棋形表
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++; //單個(gè)方向權(quán)值計(jì)算
else break;
}
for(j=x+1;j<15;j++) //向右搜索
{
if(board[j][y]==-1) q++;
else break;
}
dre_across[x][y]=p+q; //橫方向總權(quán)值計(jì)算
}
}
//豎方向
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()
{ //我方的棋形表 ,搜索過(guò)程同上面的對(duì)方搜索過(guò)程一樣
int x,y,j,k; //并計(jì)算每個(gè)方向的權(quán)值,存放到數(shù)組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(){ //對(duì)方比較大小
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; //橫坐標(biāo)存儲(chǔ)到數(shù)組a中
b[0]=y; //縱坐標(biāo)存儲(chǔ)到數(shù)組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;
} //我方比較大小,比較過(guò)程同對(duì)方比較過(guò)程一樣
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]; //給數(shù)組maxm賦初值
for(i=0;i<8;i++)
{
if(max[i]>=maxm[0])
{
maxm[0]=max[i];
maxm[1]=a[i]; //存儲(chǔ)最大權(quán)值點(diǎn)的橫、
maxm[2]=b[i]; //縱坐標(biāo)
}
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]); //打印下子點(diǎn)的坐標(biāo)
}
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表示交換下子權(quán)
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();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -