1. 程式人生 > 其它 >棋盤問題(分治方法)

棋盤問題(分治方法)

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)
	}

}