最强解析面试题:洪水...

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

附录

自负和自大真的是搞笑!

以上是关于最强解析面试题:洪水...的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:Goland 消费生产模式实现

最强解析面试题:替换空格「建议收藏!」

最强解析面试题:替换空格「建议收藏!」

最强解析面试题:硬币计算 动态规划

最强解析面试题:Goland 循环队列实现

最强解析面试题:Goland 消费生产模式实现