2024/9/13 Hot100 回溯 最后一题n皇后,昨日
This commit is contained in:
parent
ca680d7b82
commit
6f70b15c57
|
@ -0,0 +1,65 @@
|
||||||
|
package com.cool.hot100.backtracking;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA.
|
||||||
|
*
|
||||||
|
* @Author: Cool
|
||||||
|
* @Date: 2024/09/13/09:50
|
||||||
|
* DayNumber 1
|
||||||
|
* Hard 3
|
||||||
|
* Level 6
|
||||||
|
*/
|
||||||
|
public class Num51 {
|
||||||
|
|
||||||
|
char[][] chars;
|
||||||
|
boolean[] xBool;
|
||||||
|
boolean[] dir1;
|
||||||
|
boolean[] dir2;
|
||||||
|
int n;
|
||||||
|
List<List<String>> res = new ArrayList<>();
|
||||||
|
|
||||||
|
public List<List<String>> solveNQueens(int n) {
|
||||||
|
this.n = n;
|
||||||
|
chars = new char[n][n];
|
||||||
|
xBool = new boolean[n];
|
||||||
|
dir1 = new boolean[2 * n];
|
||||||
|
dir2 = new boolean[2 * n];
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
Arrays.fill(chars[i], '.');
|
||||||
|
}
|
||||||
|
dfs(0);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dfs(int y) {
|
||||||
|
if (y >= n) {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
for (char[] cs : chars) {
|
||||||
|
list.add(new String(cs));
|
||||||
|
}
|
||||||
|
res.add(list);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int x = 0; x < n; x++) {
|
||||||
|
if (xBool[x] || dir1[x + y] || dir2[x - y + n]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
xBool[x] = dir1[x + y] = dir2[x - y + n] = true;
|
||||||
|
chars[x][y] = 'Q';
|
||||||
|
dfs(y + 1);
|
||||||
|
xBool[x] = dir1[x + y] = dir2[x - y + n] = false;
|
||||||
|
chars[x][y] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
solveNQueens(4);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue