Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.

这个比N-Queens简单点,但还是一样的
class Solution {
public:
int totalNQueens(int n) {
count=0;
this->N=n;
memset(matrix,0,sizeof(matrix));
dfs(0);
return count;
}
int check(int x,int y)
{
for(int j=0;j<y;++j)
if(matrix[x][j]==1)return 0;
for(int i=0;i<N;++i)
for(int j=0;j<y;++j)
{
if(abs(i-x)==abs(j-y)&&matrix[i][j]==1)return 0;
}
return 1;
}
void dfs(int j)
{
if(j==N)
{
//存储
count++;
return ;
}
for(int i=0;i<N;++i)
{
if(matrix[i][j]==0&&check(i,j))
{
matrix[i][j]=1;
dfs(j+1);
matrix[i][j]=0;
}
}
}
private :
int N;
int count;
int matrix[100][100];
};
本文深入探讨了N皇后问题的高级应用,不仅展示了如何通过递归和回溯算法来解决该问题,而且还介绍了计算不同配置中独特解决方案总数的方法。通过实例分析和代码实现,读者将了解到如何优化算法以更高效地找出所有可能的解决方案。
336

被折叠的 条评论
为什么被折叠?



