N皇后问题是DFS的代表性问题,其最难的地方就是在判重这里,想明白了怎么判重的话问题就很显然了。
这里给出两份代码,其中第一份代码的效率更好,就是在判重上下了功夫。当然,我记得还有使用位运算进行判重的方法,这里就先不介绍了。
首先是第一份代码,二维数组直接进行判重。
1 #include2 using namespace std; 3 int n,ans=0; 4 int a[1005],v[5][1005]; 5 void dfs(int dp) 6 { 7 if(dp>n) 8 { 9 ans++;10 return;11 }12 for(int i=0;i >n;23 dfs(1);24 cout<
第二份代码的判重思路还是很容易看懂的,只不过效率不如第一份代码的好。
1 #include2 #include 3 #include 4 using namespace std; 5 const int maxn=15; 6 int n; 7 int ans=0; 8 int c[maxn]; 9 bool check(int x)10 {11 for(int i=1;i n)21 {22 ans++;23 return;24 }25 for(int i=1;i<=n;i++)26 {27 c[dp]=i;28 if(check(dp))29 dfs(dp+1);30 c[dp]=0;31 }32 }33 int main()34 {35 cin>>n;36 dfs(1);37 cout< <