class Solution {
public:
int count;
bool visited[1000];//visited[k]表示第visited[k]列已经放置过Queue了,不可再用
int col[1000];//col[0]表示第0行中,第col[0]列中放置了一个Queue
bool canPlace(int i,int j)
{
for(int k=0;k<i;k++)
{
if(abs(k-i)==abs(col[k]-j))//(k,col[k])与(i,j)不能呈45度或135度角
return false;
}
return true;
}
void dfs(int level,int n)
{
if(level==n)
{
count++;
return;
}
for(int k=0;k<n;k++)//从0到n-1枚举列
{
if((visited[k]==false)&&canPlace(level,k))
//该列没放过Queue,且对角线上也没有过Queue,又因为level代表行,所以该行之前也未有过Queue
{
visited[k]=true;
col[level]=k;
dfs(level+1,n);
visited[k]=false;
}
}
}
int totalNQueens(int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
count=0;
memset(visited,false,sizeof(visited));
dfs(0,n);
return count;
}
};
【leetcode】N-Queens II
最新推荐文章于 2022-06-06 10:35:33 发布