C# 查找并返回给定2D数组的所有循环

C# 查找并返回给定2D数组的所有循环,c#,arrays,multidimensional-array,cycle,C#,Arrays,Multidimensional Array,Cycle,我有一个int[,]2D数组,表示坐标系中的房子。每个索引都是一种表示构建块的枚举类型,例如none=0、wall=1、stairs=2。我对这个问题唯一感兴趣的部分是墙 所以问题是,给定一个尺寸为NxM的二维数组,带有这样的标记槽 //red circles represent array[i][k] == wall 我需要在多项式时间内检测网格中有多少个房间。 所以结果是这样的, 如果找到房间,所需的算法将返回包含每面墙位置的列表数组 所以我要找的是函数“findRooms” str

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

所以问题是,给定一个尺寸为NxM的二维数组,带有这样的标记槽

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

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

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

所以我要找的是函数“findRooms”

struct位置
{
int x,y;
}
教室
{
列表墙;
公共房间{};
}
课堂
{
int[,]网格;
//
//需要实现的功能
//
公共列表FindRoom(int[,]网格)
{
//给定二维网格,将返回房间列表。
返回室;
}
}
我曾想过将网格表示为一个图,并在图中找到所有的循环,但我觉得这过于复杂了

使用中的一个例子可能是Terria的建筑系统


如果有人能解释一下这个问题,我将不胜感激。

您可以查看洪水填充算法:


谢谢,我会试试看,如果我能成功,我会接受你的回答
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;
   }

}