赞
踩
#include
using namespacestd;int a[10][10]; //棋盘大小 9*9 ;
int x[8]={1,1,1,-1,-1,-1,0,0};int y[8]={1,-1,0,1,-1,0,-1,1}; //方向
bool X(int x,int y){ //防御用 检测是否是玩家的子并且判断是否合法
if(x>=1 && x<=9 && y>=1 && y<=9 && a[x][y]==1) return 1;return 0;
}bool Y(int x,int y){ //攻击用 检测是否是电脑的子并且判断是否合法
if(x>=1 && x<=9 && y>=1 && y<=9 && a[x][y]==2) return 1;return 0;
}int check1(int number){ //检验玩家是否number个一排
int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=0;k
}if(c==number) w++;
}
}
}returnw;
}int check2(int number){ //检验电脑是否number个一排
int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=0;k
}if(c==number) w++;
}
}
}returnw;
}int check11(int number){ //玩家是否 *oooo* 返回个数
int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=1;k<=number;k++){if(X(i+k*x[pos],j+k*y[pos])) c++;
}if(c==number && Y(i,j) && Y(i+(number+1)*x[pos],j+(number+1)*y[pos]) ) w++;
}
}
}returnw;
}int check21(int number){ //电脑是否 o****o 中间number 个* 返回个数
int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=1;k<=number;k++){if(Y(i+k*x[pos],j+k*y[pos])) c++;
}if(c==4 && X(i,j) && X(i+(number+1)*x[pos],j+(number+1)*y[pos]) ) w++;
}
}
}returnw;
}void solve(int x,int y) { //评估函数//先攻击 再防守//后评估是否进攻 防御
long long b[10][10]; //用函数的值来判定电脑填哪个位置.
for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){
b[i][j]=5-fabs(5-i)+5-fabs(5-j);
}
}
cout<
cout<
cout<
}cout<
}cout<
for(int i=1;i<=9;i++){ //检验自己是否下这个点就赢了
for(int j=1;j<=9;j++){if(a[i][j]) continue;
a[i][j]=2; if(check2(5)) { a[i][j]=2; cout<
}
}for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){if(a[i][j]) continue;intnum1,num2;
num1=check2(4); a[i][j]=2; num2=check2(4); a[i][j]=0; b[i][j]+=(num2-num1)*1000000000 ;//****//检验自己是否4个一串
num1=check21(4);a[i][j]=2; num2=check21(4); a[i][j]=0; b[i][j]-=(num2-num1)*1000000000;//-++++-
num1=check2(3); a[i][j]=2; num2=check2(3); a[i][j]=0; b[i][j]+=(num2-num1)*10000000; //***//检验自己是否3个一串
num1=check21(3);a[i][j]=2; num2=check21(3); a[i][j]=0; b[i][j]-=(num2-num1)*10000000;//-+++-
num1=check2(2); a[i][j]=2; num2=check2(3); a[i][j]=0; b[i][j]+=(num2-num1)*100000; //**//检验自己是否两个一串
num1=check21(2);a[i][j]=2; num2=check21(2); a[i][j]=0; b[i][j]-=(num2-num1)*100000;//-++-
}
}//防守 防守对面直接死
for(int i=1;i<=9;i++){ //检验对手是否下这个点就赢了
for(int j=1;j<=9;j++){if(a[i][j]) continue;
a[i][j]=1; if(check1(5)) { a[i][j]=2; cout<
}
}//防守评分
for(int i=1;i<=9;i++){ //检验对手是否4个一串
for(int j=1;j<=9;j++){if(a[i][j]) continue;intnum1,num2;
num1=check1(4); a[i][j]=1; num2=check1(4); a[i][j]=0; b[i][j]+=(num2-num1)*100000000; //****//检验自己是否4个一串
num1=check11(4);a[i][j]=1; num2=check11(4); a[i][j]=0; b[i][j]-=(num2-num1)*100000000;//-++++-
num1=check1(3); a[i][j]=1; num2=check1(3); a[i][j]=0; b[i][j]+=(num2-num1)*1000000; //***//检验自己是否3个一串
num1=check11(3);a[i][j]=1; num2=check11(3); a[i][j]=0; b[i][j]-=(num2-num1)*1000000;//-+++-
num1=check1(2); a[i][j]=1; num2=check1(3); a[i][j]=0; b[i][j]+=(num2-num1)*10000; //**//检验自己是否两个一串
num1=check11(2);a[i][j]=1; num2=check11(2); a[i][j]=0; b[i][j]-=(num2-num1)*10000;//-++-
}
}int num=0;intaa,bb;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){if(a[i][j]==0&&b[i][j]>num){
num=b[i][j];
aa=i;
bb=j;
}
}
}
cout<
a[aa][bb]=2; return;
}voidshow(){
cout<
cout<
if(a[i][j]==2) cout<
}cout<
}cout<
}intmain(){
cout<
show();while(1){
cout<
cout<
cin>>x>>y;if(a[x][y] || x>9 || x<=0 || y>9 || y<=0) { cout<
}
a[x][y]=1;bool k=0; k=check1(5); if(k){ show(); cout<
solve(x,y);
k=check2(5); if(k){ show(); cout<
show();
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。