var result [][]string var path []string funcsolveNQueens(n int) [][]string { result = [][]string{} path = []string{} umap := make(map[int]int) backtracking(0, umap, n) return result }
funcbacktracking(row int, umap map[int]int, n int) { if row == n { t := make([]string, len(path)) copy(t, path) result = append(result, t) return } s := make([]rune, n, n) for i, _ := range s { s[i] = '.' } for col := 0; col < n; col++ { _, ok := umap[col] flag := false for pre_col, pre_row := range umap { if abs(row - pre_row) == abs(col - pre_col) { flag = true break } } if flag {continue} if ok {continue} s[col] = 'Q' umap[col] = row path = append(path, string(s)) backtracking(row + 1, umap, n) s[col] = '.' delete(umap, col) path = path[:len(path) - 1] } }
funcabs(a int)int{ if a < 0 {return -a} return a }