随机地形装水问题

  前几个月面试一个美国公司, 给了几道线上题, 说是一星期都做完就行了, 因为当时在考编制, 就没有继续做了, 其中有一道就是装水的问题:

  一个使用正方体作为基础, 随机生成的地面, 下雨之后能装多少水? 如下图:

  姑且认为只要前后左右都有石头的时候, 就能把水存住 : 

  计算逻辑可以先从找到无法存水的点开始, 其它的点就作为可存储水的点, 设置一个较大的储存水量的数值, 然后厉遍这些无法存水的点,

找到可到达的其它点(高度小于等于起始点的), 就像寻路算法的厉遍逻辑, 将所有到达点的可存储水量设置到不高于当前点的最小值, 即可.

  这里如何找到无法存水的点, 可以先看二维的情况:

  显而易见, 图中的0点都是无法存水的, 要找到这些点只需要找到第一个最高点, 然后往左右继续找最高点, 直到末尾.

  用这个方法从横向上来一遍, 再从纵向上来一遍, 就能大致找到地表无法储存水的点了. 然后厉遍就是了.

 

 

  

 

posted @ 2022-09-02 14:15  tiancaiKG  阅读(58)  评论(0编辑  收藏  举报