最强解析面试题:洪水...
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:洪水...相关的知识,希望对你有一定的参考价值。
文章目录
最强解析面试题:洪水…
文章讲解 “ 洪水… ” 经典面试题,包含思路及源码,及解惑!
题目
有一个XxY的网格,洪水从首格涌出,可以向上下左右四个方向流向。请设计一个算法,计算有多少种走法。给定两个正整数int x,int y表示网格的大小,计算洪水的走法数目。
思路
- 动态规划
- 边界条件为 x=0,y=0,res[x][y] = 1
- 主线条件为 res[next_x][next_y] = res[now_x][now_y] + 1
注意:和机器人走方格不同,洪水向四面八方涌,故定义辅助数组和队列
代码
func main()
fmt.Println("res:", Res())
func Res() int
x := 2
y := 2
var dir = [4][2]int1, 0, -1, 0, 0, 1, 0, -1
var q []int
res := make([][]int, x)
for i, _ := range res
res[i] = make([]int, y)
q = append(q, 0)
if len(q) > 0
now := q[0]
q = q[1:]
now_x := now / x
now_y := now % x
if now_x == x-1 && now_y == y-1
return res[now_x][now_y]
for i := 0; i < 4; i++
next_x := now_x + dir[i][0]
next_y := now_y + dir[i][1]
if next_x >= 0 && next_x < x && next_y >= 0 && next_y < y && tar[next_x][next_y] == 0
res[next_x][next_y] = res[now_x][now_y] + 1
q = append(q, next_x*x+next_y)
return 0
附录
自负和自大真的是搞笑!
以上是关于最强解析面试题:洪水...的主要内容,如果未能解决你的问题,请参考以下文章