五子棋和棋情况枚举,五乘五棋盘,白棋为一,黑棋为二;为什么错了
#include<bits/stdc++.h>
using namespace std;
int sum=0;
int ans=0;
int cnt1=0,cnt2=0;
int m[6][6];//白棋表1,13个,黑棋表2,12个;
bool check(){
for(int i=1;i<=5;i++){
sum=m[i][1]+m[i][2]+m[i][3]+m[i][4]+m[i][5];
if(sum==5||sum==10){
return 0;
}
sum=0;
}
for(int j=1;j<=5;j++){
sum=m[1][j]+m[2][j]+m[3][j]+m[4][j]+m[5][j];
if(sum==5||sum==10){
return 0;
}
sum=0;
}
for(int i=1;i<=5;i++){
sum=sum+m[i][i];
}
if(sum==5||sum==10){
return 0;
}
sum=0;
for(int i=1;i<=5;i++){
sum=sum+m[i][5-i+1];
}
if(sum==5||sum==10){
return 0;
}
sum=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(m[i][j]==1){
cnt1++;
}
if(m[i][j]==2){
cnt2++;
}
}
}
if(cnt1-cnt2!=1){
return 0;
}
return 1;
}
void dfs(int x,int y){
if(y==6){
dfs(x+1,1);
return ;
}
if(x==6){
if(check()){
ans++;
return ;
}
}
m[x][y]=1;
dfs(x,y+1);
m[x][y]=0;
m[x][y]=2;
dfs(x,y+1);
m[x][y]=0;
}
int main(){
dfs(1,1);
cout<<ans<<endl;
return 0;
}