八皇后问题,经典的回朔算法

复制const N int = 8 //八皇后问题

var Board [N][N]int = [N][N]int{} //初始化棋盘
var Result int = 0

func setBlock(row int, col int, val int) { //设置障碍,-1
	//设置不可放置宫格
	for r, c := row, col; r < N && c >= 0; {
		//设置左下宫格
		Board[r][c] += val
		c--
		r++
	}
	for r := row; r < N; r++ {
		//设置正下方宫格
		Board[r][col] += val
	}
	for r, c := row, col; r < N && c < N; {
		//设置右下方宫格
		Board[r][c] += val
		c++
		r++
	}
}

func recursive(row int, col int) { //递归
	if row == N { // row 行号
		Result++
		return
	}
	for ; col < N; col++ {
		if Board[row][col] == 0 {
			//设置不可访问宫格
			setBlock(row, col, -1) //置成-1
			recursive(row+1, 0)    //从第 0 列开始
			//还原上一次设置
			setBlock(row, col, 1) //回朔的时候再重新置成 0
		}
	}
}

func main() {
	recursive(0, 0)
	fmt.Println(Result)
}
posted @   沧海一声笑rush  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示