求调,为啥我这个跑不了
查看原帖
求调,为啥我这个跑不了
591458
qinziao楼主2024/8/30 20:02
#include<bits/stdc++.h>
using namespace std;
int n,ans;
bool lie[15],xieh[30],xie1[15],xie2[15];
stack<int>q;
void getout(){
	ans++;
	if(ans>3) return;
	while(q.size()){
		printf("%d ",q.top());
		q.pop();
	}
	printf("\n");
}
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();
							else
								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();
							else
								return 1;
						}
						
							xie2[j-x]=0;
							
					}
				
			lie[j]=0;
			xieh[x+j]=0;
			
		}
	
	
	return 0;
}
int main(){
	cin>>n;
	dfs(1);
	printf("%d\n",ans);
	return 0;
}
2024/8/30 20:02
加载中...