WA求调+玄关
查看原帖
WA求调+玄关
1035893
2789617221guo楼主2025/7/26 11:48
#include<bits/stdc++.h>

using namespace std;

const int INF=0x3f3f3f3f;
const double EPS=1e-8;
const int fx[4]={0,0,1,1};
const int fy[4]={0,1,0,1};

long long n=5,ans=0,a[10][10];

bool check(int x,int y,int dir,int cnt,int lst){
	if(cnt>=5) return 1;
	if(a[x][y]!=lst&&lst!=0) return 0;
	// cerr<<">> route:("<<x<<","<<y<<")"<<endl;
	int nx=x+fx[dir],ny=y+fy[dir];
	return check(nx,ny,dir,cnt+1,a[x][y]);
}

void dfs(int x,int y,int blk,int wht){
	if(x>n){
		if(wht!=13) return;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				bool ck=0;
				if(j+5-1<=n){
					// cerr<<"跟踪右向轨迹:"<<endl;
					ck=check(i,j,1,0,0);
					if(ck) return;
					// cerr<<"于"<<"("<<i<<","<<j<<")"<<"位置的右向测试无误!"<<endl;
				}
				if(i+5-1<=n){
					ck=check(i,j,2,0,0);
					if(ck) return;
					// cerr<<"于"<<"("<<i<<","<<j<<")"<<"位置的下向测试无误!"<<endl;
				}
				if(i+5-1<=n&&j+5-1<=n){
					ck=check(i,j,3,0,0);
					if(ck) return;
					// cerr<<"于"<<"("<<i<<","<<j<<")"<<"位置的斜向测试无误!"<<endl;
				}
			}
		}
		// cerr<<"第"<<ans+1<<"个和棋棋局:"<<endl;
		// for(int i=1;i<=n;i++){
		// 	for(int j=1;j<=n;j++){
		// 		cerr<<(a[i][j]==1?"●":"○");
		// 	}
		// 	cerr<<endl;
		// }
		ans++;
		return;
	}
	int nx=(y==n?x+1:x),ny=(y==n?1:y+1);
	a[x][y]=1; //黑
	dfs(nx,ny,blk+1,wht);
	a[x][y]=2; //白
	dfs(nx,ny,blk,wht+1);
}

int main(){
	// system("chcp 65001");
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	dfs(1,1,0,0);
	cout<<ans<<endl;
	return 0;
}
2025/7/26 11:48
加载中...