public static HashSet <UEdge2i> Cell_ExpansionEdges_Set(
     this PM_Maze maze,
     int x,
     int y
     )
 {
     return(maze.Cell_ExpansionEdges_Set(new Vec2i(x, y)));
 }
        public static HashSet <UEdge2i> ConnectedCells_ExpansionEdges_Set(
            this PM_Maze maze
            )
        {
            HashSet <UEdge2i> expansionEdges = new HashSet <UEdge2i>();
            HashSet <Vec2i>   connectedCells = maze.ConnectedCells_Set();

            foreach (var cell in connectedCells)
            {
                if (maze.Q_Is_Cell_Connected(cell))
                {
                    expansionEdges.UnionWith(maze.Cell_ExpansionEdges_Set(cell));
                }
            }
            return(expansionEdges);
        }
        public static List <UEdge2i> All_ExpansionEdges_List(
            this PM_Maze maze
            )
        {
            int width  = maze.Q_Width();
            int height = maze.Q_Height();

            List <UEdge2i> all_ExpansionEdges = new List <UEdge2i>();

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    all_ExpansionEdges.AddRange(maze.Cell_ExpansionEdges_Set(x, y));
                }
            }
            return(all_ExpansionEdges);
        }
        public static HashSet <UEdge2i> All_ExpansionEdges_Set(
            this PM_Maze maze
            )
        {
            int width  = maze.Q_Width();
            int height = maze.Q_Height();

            HashSet <UEdge2i> all_ExpansionEdges = new HashSet <UEdge2i>();

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    all_ExpansionEdges.UnionWith(maze.Cell_ExpansionEdges_Set(x, y));
                }
            }
            return(all_ExpansionEdges);
        }