package main
import(
"fmt"
)
func dfs(x int, n int, g [][]byte, row []bool, col []bool, diag []bool){
if x == n{
for i := 0;i< n;i++{
//fmt.Println(".")
fmt.Println(string(g[i]))
//fmt.Println("")
}
fmt.Println("")
return
}
for y := 0;y<n;y++{
if (col[y]==false && row[x + y]==false && diag[n+y -x]==false){
g[x][y]='Q';
col[y] = true
diag[n +y -x] = true
row[x + y] = true
dfs(x + 1,n, g, row, col, diag)
col[y] = false
diag[n +y -x] = false
row[x + y] = false
g[x][y] = '.'
}
}
}
func main(){
var n int
fmt.Scanf("%d", &n)
//fmt.Println(n)
g := make([][]byte, n)
col := make([]bool, n)
row := make([]bool, n* 2)
diag := make([]bool, n*2)
for i := range g{
g[i] = make([]byte, n)
for j := range g[i] {
g[i][j]= '.'
}
}
dfs(0, n, g, row, col, diag)
}
或者内嵌函数
package main
import(
"fmt"
)
func main(){
var n int
fmt.Scanf("%d", &n)
//fmt.Println(n)
g := make([][]byte, n)
col := make([]bool, n)
row := make([]bool, n* 2)
diag := make([]bool, n*2)
for i := range g{
g[i] = make([]byte, n)
for j := range g[i] {
g[i][j]= '.'
}
}
var dfs func(x int)
dfs = func(x int){
if x == n{
for i := 0;i< n;i++{
//fmt.Println(".")
fmt.Println(string(g[i]))
//fmt.Println("")
}
fmt.Println("")
return
}
for y := 0;y<n;y++{
if (col[y]==false && row[x + y]==false && diag[n+y -x]==false){
g[x][y]='Q';
col[y] = true
diag[n +y -x] = true
row[x + y] = true
dfs(x + 1)
col[y] = false
diag[n +y -x] = false
row[x + y] = false
g[x][y] = '.'
}
}
}
dfs(0)
}