LeetCode 52 N - クイーンII

タイトル

 

スタックと再帰的に問題、この時間

 

`` `

クラスのソリューション{
パブリック:
int型ANS = 0;
INT [100] [100]。
int型メートル。
INT X [100005]。
INTのY [100005]。
int型S [100005]。
int型のp [100005]。
INT totalNQueens(int型N){

M = N。
memset(0、はsizeof(a)参照)。
int型POS = 0;
S [POS] = 0;
X [POS] = - 1。
Y [POS] = - 1。
P [POS] = - 1。
POS ++;
ながら(!POS = 0)
{
int型I = sの[POS-1]。

IF(I == N)
{
ANS ++。
}

もし(P [POS-1] <= N-1 && I = N!)
{
P [POS-1] ++;
一方、(![I] [P [POS-1]] = 0)
{
P [POS-1] ++;
}
もし(P [POS-1] = N!){


[I] [P [POS-1] = 1。
setLock(I、P [POS-1]、2)。
S [POS] = I + 1。
X [POS] = I。
Y [POS] = P [POS-1]。
P [POS] = - 1。
POS ++;

持続する;
}
}

もし(POS == 1)
ブレーク。

[X [POS-1]] [Y [POS-1]] = 0;
setLock(X [POS-1]、Y [POS-1]、 - 2)。
pos--;
}

戻りANS。

}

ボイドsetLock(int型のx、int型のY、int型NUM)
{
(INT I = X + 1、iがm <; iは++)のために
{
[i]を[Y] + = NUM。
}
INTタグ= 1。
以下のために(INT I = X + 1、iがm <; iは++)
{
IF(Y +タグ<M)
[i]を[Y +タグ] + = NUM。
もし(Y-タグ> = 0)
[i]を[Y-タグ] + = NUM。

タグ++;
}
}


}。

`` `

おすすめ

転載: www.cnblogs.com/dacc123/p/11420245.html