scala 深搜法解决八皇后问题

object EightQueen2 extends App{
	val pos = new Array[Int](8)
	val rowvisited = new Array[Boolean](8)
	val colvisited = new Array[Boolean](8)
	val maindiagonalvisited = new Array[Boolean](15)
	val counterdiagonalvisited = new Array[Boolean](15)
	var num = 0
	def printqueen(){
		for(i <- 0.until(8);j <- 0.until(8)){
			if(j == pos(i)) print('*') else print('-')
			if(j == 7) println()
		}
	}
	def dfs(x:Int,count:Int){
		if(count == 8){
			num += 1
			println(num)
			printqueen()
			return 
		}
		if(x >= 8) return
		dfs(x+1,count)
		for(y <- 0.until(8)){
			if(!rowvisited(x) && !colvisited(y) && !maindiagonalvisited(x+y) && !counterdiagonalvisited(x-y+7)){
				rowvisited(x) = true
				colvisited(y) = true
				pos(x) = y
				maindiagonalvisited(x+y) = true
				counterdiagonalvisited(x-y+7) = true
				dfs(x+1,count+1)
				rowvisited(x) = false
				colvisited(y) = false
				pos(x) = 0
				maindiagonalvisited(x+y) = false
				counterdiagonalvisited(x-y+7) = false
			}
		}
	}
	dfs(0,0)
}

对比:scala 回溯法解决八皇后问题

参考:回溯法与深度优先遍历的异同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值