N皇后问题求解-递归算法

it2026-04-09  2

N皇后问题的递归算法求解:

/* 递归算法求解N皇后问题 */ #include<iostream> #include<vector> using namespace std; int Num=0; void check(int i,vector<bool>C,vector<bool>R,vector<bool>L,vector<int>Queen,unsigned N) { int j; int k; for(j=1;j<=N;j++) { if((C[j]==true)&&(R[i+j]==true)&&(L[i-j+N+1]==true)) { Queen[i]=j; C[j]=false; L[i-j+N+1]=false; R[i+j]=false; if(i<N) { check(i+1,C,R,L,Queen,N); } else { Num++; cout<<"方案"<<Num<<":"<<"\t"; for(k=1;k<=N;k++) cout<<k<<"行"<<Queen[k]<<"列"<<"\t"; cout<<endl; } C[j]=true; L[i-j+N+1]=true; R[i+j]=true; } } } int main() { int Num=0; unsigned N; cout<<"Which queens do you want?Please input a nunmber:(N>4) "<<endl; cin>>N; vector<int>Queen(N+1); vector<bool>C(N+1); vector<bool>L(N*2+1); vector<bool>R(N*2+1); int Normalize=N+1; cout<<"------------Options-----------"<<endl; int i; for(i=1;i<N+1;i++) C[i]=true; for(i=0;i<N*2+1;i++) L[i]=R[i]=true; check(1,C,R,L,Queen,N); return 0; }

测试运行结果: 你想要几皇后呢@我~

最新回复(0)