问题描述
这里的return语句有什么意义? [问题:N_queen 问题] 当我不使用 return 调用时,该函数可以工作。但是当我在递归调用中使用 return 语句时它不起作用[我在代码中提到过]。请解释一下,如果可能,您能否通过跟踪调用(即控件如何移动)来解释?
#include <iostream>
#include <bitset>
using namespace std;
bitset<30> cols,diag1,diag2; //all zeros
void Nqueen(int n,int row,int& ans){
if(row==n){
ans++;
return;
}
//moving across each column
//k is iterator for columns
for(int k=0;k<n;k++){
if(!cols[k] && !diag1[row+k] && !diag2[row-k+n-1]){
cols[k]=diag1[row+k]=diag2[row-k+n-1]=1;
Nqueen(n,row+1,ans); //this recursion call I am talking about.
// if I comment out the above recursion call and instead write
// return (Nqueen(n,rows+1,ans));
// It outputs 0 for any input n
cols[k]=diag1[row+k]=diag2[row-k+n-1]=0; //backtracking
}
}
}
int main(){
int n; cin>>n; //size of board(square matrix)
int ans=0;
Nqueen(n,ans);//0 is for 1st row
cout<<ans<<endl;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)