社区讨论

为啥我这个跑不出来

P1219[USACO1.5] 八皇后 Checker Challenge参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m0gnfz2h
此快照首次捕获于
2024/08/30 19:47
2 年前
此快照最后确认于
2024/08/30 19:50
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
bool lie[15],xieh[30],xie1[15],xie2[15];
stack<int>q;
void getout(){
	while(q.size()){
		printf("%d ",q.top());
		q.pop();
	}
}
bool dfs(int x){
	if(x==n+1) return 1;
	
	for(int j=1;j<=n;j++){
		
		if(!lie[j]&&!xieh[x+j]){
				
			lie[j]=1;
			xieh[x+j]=1;
				
				if(x>j)
					if(!xie1[x-j]){
						
							xie1[x-j]=1;
							
						if(dfs(x+1)){
							q.push(j);
							if(x==1){
								getout();
							}
							return 1;
						}
						
							xie1[x-j]=0;
							
					}
				
				else
					if(!xie2[j-x]){
						
							xie2[j-x]=1;
							
						if(dfs(x+1)){
							q.push(j);
							if(x==1){
								getout();
							}
							return 1;
						}
						
							xie2[j-x]=0;
							
					}
				
			lie[j]=0;
			xieh[x+j]=0;
			
		}
	}
	
	return 0;
}
int main(){
	cin>>n;
	dfs(1);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...