五子棋对弈(lanqiao.cn)个数求坐标+暴力枚举二维矩阵
作者:
dpking
,
2025-03-08 13:30:56
· 重庆
,
所有人可见
,
阅读 7
#include <bits/stdc++.h>
using namespace std;
int mp[5][5];
int u=0;
void dfs(int sum,int h,int b)
{
//地图满了;判断
if(sum==25) //填满棋盘
{
if(h==13&&b==12){ //且符合下棋规则,就可判断
for(int i=0;i<5;i++) //横5
{
int s=mp[i][0]+mp[i][1]+mp[i][2]+mp[i][3]+mp[i][4];
if(s==5||s==0) return;
}
for(int i=0;i<5;i++)//纵5
{
int m=mp[0][i]+mp[1][i]+mp[2][i]+mp[3][i]+mp[4][i];
if(m==5||m==0) return;
}
int p=mp[0][0]+mp[1][1]+mp[2][2]+mp[3][3]+mp[4][4]; //斜5
int l=mp[0][4]+mp[1][3]+mp[2][2]+mp[3][1]+mp[4][0];
if(p==0||p==5||l==0||l==5) return;
u++;
}
return;
}
int x=sum/5;
int y=sum%5;//通过sum值计算坐标
mp[x][y]=1;//选择白棋
dfs(sum+1,h+1,b);
mp[x][y]=0;//选择黑棋
dfs(sum+1,h,b+1);
}
int main()
{
dfs(0,0,0);
cout<<u;
return 0;
}