在给定2D阵列的情况下查找并返回所有循环

时间:2014-02-04 04:11:50

标签: c# arrays multidimensional-array cycle

我有一个int[,] 2D数组,表示坐标系中的房子。每个索引都是一种表示构造块的枚举,例如none = 0,wall = 1,stairs = 2。我对这个问题感兴趣的唯一部分是墙壁。

所以问题是,给定一个大小为NxM的2D数组,带有这样的标记插槽;

//red circles represent 
array[i][k] == wall

我需要在多项式时间内检测网格中有多少个房间。 所以结果就是这样,

如果找到房间,所需的算法将返回包含每个墙的位置的列表数组。

所以我正在寻找的是“findRooms”函数

struct position
{
  int x,y;
}

class Room
{
    List<position> walls;
    public Room(){};
}

class Floor
{

   int[,] grid;

   //
   // The function that's needed to be implemented
   //
   public List<Room> findRooms(int[,] grid)
   {
      // given a 2D grid returns a list of rooms. 

      return Rooms;
   }

}

我想把网格表示为图形并找到图形中的所有周期,但我觉得这已经过去使它们已经复杂化了。

使用它的一个例子可能是terraria的建筑系统。

如果有人能对这个问题有所了解,我真的很感激。

1 个答案:

答案 0 :(得分:2)

您可以查看Flood填充算法:

http://en.wikipedia.org/wiki/Flood_fill