题解 | #迷宫问题#

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

package main

import (
	"fmt"
	"io"
)

func dfs(flag [1000][1000]bool, input [][]int, ret *[][]int, i, j, m, n int) {
	if i < 0 || j < 0 || i >= m || j >= n {
		return
	}
	if i == m-1 && j == n-1 {
		for i := range *ret {
			fmt.Printf("(%d,%d)\n", (*ret)[i][0], (*ret)[i][1])
		}
		fmt.Printf("(%d,%d)\n", m-1, n-1)
		return
	}
	if input[i][j] == 1 {
		return
	}
	if flag[i][j] {
		return
	}
	flag[i][j] = true
	*ret = append(*ret, []int{i, j})
	dfs(flag, input, ret, i-1, j, m, n)
	dfs(flag, input, ret, i+1, j, m, n)
	dfs(flag, input, ret, i, j-1, m, n)
	dfs(flag, input, ret, i, j+1, m, n)
	*ret = (*ret)[:len(*ret)-1]
	flag[i][j] = false
}
func main() {
	for {
		var (
			m, n int
		)
		var flag [1000][1000]bool
		_, err := fmt.Scanf("%d %d", &m, &n)
		if err == io.EOF {
			return
		}
		r := make([][]int, m)
		for i := range r {
			r[i] = make([]int, n)
		}
		for i := 0; i < m; i++ {
			for j := 0; j < n; j++ {
				fmt.Scan(&r[i][j])
			}
		}
		var ret [][]int
		dfs(flag, r, &ret, 0, 0, m, n)
	}
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务