1 package main
2
3 import (
4 "fmt"
5 "math"
6 )
7
8 //判断第k行的某一列放置是否合法
9 func check(col []int, k int) int {
10 for i := 0; i < k; i++ {
11 if col[i] == col[k] || float64(k - i) == math.Abs(float64(col[k] - col[i])) {//与前部分行同列或者列之差的绝对值与两行之差的绝对值相等
12 return 0
13 }
14 }
15 return 1
16 }
17
18 //迭代实现, 思想原理同着色问题
19 func n_queen(k int) []int{
20 var i int
21 col := make([]int, k)
22 for i = 0; i < k; i++ {
23 col[i] = 0
24 }
25 for i = 0; i >= 0; {
26 for col[i] < k {
27 col[i]++
28 if check(col, i) > 0 {
29 i++
30 }
31 if i == k {
32 return col
33 }
34 }
35 col[i] = 0
36 i--
37 }
38 return nil
39 }
40
41 func main() {
42 k := 29
43 res := n_queen(k)
44 if res != nil {
45 for i := 0; i < k; i++ {
46 fmt.Print(res[i], "\t")
47 }
48 }
49 }
50