⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n皇后问题.cpp

📁 n皇后问题
💻 CPP
字号:
#include<iostream.h> 
#include<stdlib.h> 
int **a; 
int *h; 
bool put(int i,int j,int n) 
{ 
int r,s; 
for(r=0;r<n;r++) 
{ 
for(s=0;s<n;s++) 
{ 
if(a[i][r]==1||a[s][j]==1){break;} 
if( (((r+s)==(i+j))  ||  ((r-s)==(i-j))  )&&(a[r][s]==1)){break;} 
} 
if(s!=n)break;//充分说明了在循环体里定义的变量出了循环体就不能用。 
} 
if(r!=n||s!=n)return false; 
else return true; 
} 
void trial(int i,int n) 
{ 
int j; 
if(i>n-1) 
{ 
cout<<"the site of the queen is"<<endl; 
for(int p=0;p<n;p++) 
{ 
for(int q=0;q<n;q++) 
{ 
if(a[p][q]==1)cout<<p<<q; 
} 
cout<<endl; 
} 
char v; 
cout<<"if you want to continue,please put in Y/y"<<endl; 
cin>>v; 
if(v=='y'||v=='Y') 
{ 
i=i-1;int z=h[i]; 
a[i][z]=0; 
} 
else exit(2); 
} 
else  
{ 
for(j=0;j<n;j++) 
{ 
if(put(i,j,n)) 
{ 
a[i][j]=1;h[i]=j; 
trial(i+1,n); 
} 
} 
if(j==n) 
{ 
if(i>0) 
{ 
i=i-1;int z=h[i]; 
a[i][z]=0; 
} 
else 
cout<<"search has been finished!"<<endl; 
}//递归也要返回到原状态。。很郁闷,是程序设计的问题?? 
} 
} 
void main() 
{ 
int n; 
cout<<"please put in the number of the queen"<<endl; 
cin>>n; 
a=new int*[n]; 
h=new int[n]; 
int i=0; 
for(int p=0;p<n;p++) 
{ 
a[p]=new int[n]; 
for(int q=0;q<n;q++) 
{a[p][q]=0;} 
} 
trial(i,n); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -