首页 > 解决方案 > 如何使用返回类型 List 在 scala 中实现洪水填充

问题描述

我正在尝试以一种功能性的方式在 Scala 中实现洪水填充算法,这样我就不必使用任何类型的变量或状态。

所以我要的是实现,对于一个类似的函数定义,返回类型是要填充的像素列表。

def FloodFill(replacementColor: Color, pixel: Pixel, pixels: List[Pixels] ): List[Pixels]

pixels: List[Pixel被假定为形状的边界并且在pixel: Pixel形状内的某处。

到目前为止,我已经尝试过这样的事情:

def FloodFill(replacementColor: Color, pixel: Pixel, pixels: List[Pixels] ): List[Pixels]= {
  if(pixels.exists(p => p.x == pixel.x && p.y == pixel.y)) return pixels
  FloodFill(color, new Pixel(pixel.x, pixel.y-1, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
  FloodFill(color, new Pixel(pixel.x, pixel.y+1, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
  FloodFill(color, new Pixel(pixel.x-1, pixel.y, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
  FloodFill(color, new Pixel(pixel.x+1, pixel.y, color), new Pixel(pixel.x, pixel.y, color) ::pixels)
}

...这显然行不通。

标签: scalarecursionfunctional-programming

解决方案


推荐阅读