goalng实现栈及八皇后问题

特点:先进后出,后进先出

应用场景:

  1. 子程序的调用:在跳往子程序前,先将下个指令的地址存储到堆栈中,直到子程序执行完成后再将地址取出,以回到原来的程序中;
  2. 递归调用:和子程序调用类似,存储下个指令的地址、参数、区域变量等
  3. 表达式转换(中缀表达式转后缀表达式)与求值(实际解决)
  4. 二叉树遍历
  5. 图形的深度优先搜索算法

1. 迷宫问题

1.1 问题描述
  • 在一个n*m的迷宫里,每一bai个坐标点有两种可能:0或1,0表示du该位置允许通过,1表示该位置不zhi允许通过
1.2 解法:
package main

import (
	"fmt"
)

func main() {
	var mazeMap [8][7]int
	//1代表墙,0代表路,2代表走过的路
	for i := 0; i < len(mazeMap); i++ {
		mazeMap[i][0] = 1
		mazeMap[i][6] = 1
	}
	for i := 0; i < len(mazeMap[0]); i++ {
		mazeMap[0][i] = 1
		mazeMap[7][i] = 1
	}
	mazeMap[3][1] = 1
	mazeMap[3][2] = 1
	setWay(&mazeMap, 1, 1)
	for i := 0; i < len(mazeMap); i++ {
		fmt.Println(mazeMap[i])
	}

}

func setWay(mazeMap *[8][7]int, i, j int) (bool) {
	//起点mazeMap[1][1],终点mazeMap[6][5]
	if mazeMap[6][5] == 2 {
		return true
	}
	if mazeMap[i][j] == 0 {
		mazeMap[i][j] = 2
		if setWay(mazeMap, i+1, j) {//向下
			return true
		} else if setWay(mazeMap, i, j+1) {//向右
				return true
		} else if setWay(mazeMap, i-1, j) {//向上
			return true
		} else if setWay(mazeMap, i-1, j) { //向左
			return true
		} else {
			mazeMap[i][j] = 3
			return false
		}
	} else {
		return false
	}
}

2. 八皇后问题

2.1 问题描述:

  • 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法

2.2 解法:

package main

import (
	"fmt"
)

var queens [8]int
var count int
func main () {
	check(0)

}

//判断该位置是否正确
func judgePos(pos int) bool {
	for i := 0; i < pos; i++ {
		if queens[i] == queens[pos] || pos - i == queens[pos] - queens[i] ||  i -pos == queens[pos] - queens[i] {
			return false
		}
	}
	return true
}

func check(n int) {
	if n == 8 {
		count++
		fmt.Println(queens)
		fmt.Println("第%d种解法", count)
		return 
	}

	for i := 0; i < 8; i++ {
		queens[n] = i
		if judgePos(n) {
			check(n + 1)
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值