6. recursion 응용
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
return-type queens (arguments) {
if non-promising
report fail and return;
else if success
report answer and return;
else
visit children recursively
}int[] cols = new int [N+1];
boolean queens (int level) {
if (!promising(level))
report fail and return;
else if (level == N)
return true;
else {
// visit children recursively
for (int i = 1; i <= N; i++) {
cols[level+1] = i;
if(queens(level + 1))
return true;
}
// n번 다 돌아봤는데 다 실패 그니까 false
return false;
}
}boolean promising (int level) {
for(int i = 1; i< level; i+=1) {
if (cols[i] == cols[level]) return false;
else if (level - i == Math.abs(cols[level] - cols[i])) // 같은 대각선에 놓였는지
return false;
}
return true;
}return-type queens (arguments) {
if non-promising // 다음 자식 노드로 리커시브 진행할지 여부 결정
report fail and return;
else if success
report answer and return;
else
visit children recursively
}