棋盤問題(分治方法)
阿新 • • 發佈:2022-01-17
package main import "fmt" var title int func main() { var board [][]int var size int var tr, tc, dr, dc int size = 8 board = make([][]int, size) for i := 0; i < size; i++ { board[i] = make([]int, size) } tr = 0 tc = 0 dr = 2 dc = 2 divide(board, tr, tc, dr, dc, size) for i:=0;i<size;i++{ for j:=0;j<size;j++{ fmt.Printf("%3d",board[i][j]) } fmt.Println() } } func divide(board [][]int, tr, tc, dr, dc, size int) { if size == 1 { return } s := size / 2 title++ n := title //top left if dr < tr+s && dc < tc+s { divide(board, tr, tc, dr, dc, s) } else { board[tr+s-1][tc+s-1]=n divide(board, tr, tc, tr+s-1, tc+s-1, s) } //top right if dr < tr+s && dc >= tc+s { divide(board, tr, tc+s, dr, dc, s) } else { board[tr+s-1][tc+s]=n divide(board, tr, tc+s, tr+s-1, tc+s, s) } //bottom left if dr >= tr+s && dc < tc+s { divide(board, tr+s, tc, dr, dc, s) } else { board[tr+s][tc+s-1]=n divide(board, tr+s, tc, tr+s, tc+s-1, s) } //bottom right if dr >= tr+s && dc >= tc+s { divide(board, tr+s, tc+s, dr, dc, s) } else { board[tr+s][tc+s]=n divide(board, tr+s, tc+s, tr+s, tc+s, s) } }