读入矩阵并构建图形

时间:2014-08-15 09:35:07

标签: c++ algorithm parsing graph

我有一个长方形房间;其&#39;地板覆盖着地板,其中一些是破碎的。 房间的尺寸为N和M:1 <= N,M <= 300。 我从stdin读取了N和M,然后我读了N个长度为M的字符串,如下所示:

..**.***....*.**...**.***
.**......**...***..***...

依此类推,.是一个很好的地板,*是一个破碎的地板。 我打算用新的地板替换破碎的地板,我只有两种类型:逐个和一个一个。我无法逐个将两个一个切成两个。 为了找到这样做的方法,我像棋盘一样在地板上画画,这样一个破碎的两个一半的颜色是不同的。 然后我的意思是从结果矩阵中构建一个二分图(由白色和黑色部分组成),我想用this code构建和分析它。

最好的方法是什么? 我认为我不应该将所有矩阵保留在内存中(因为它可能相当大)。理想情况下,我应该能够读取字符串并在运行时更新图表。

编辑: 我的代码应该是这样的:

int main()
{
int N, M;
std::cin >> N;
assert (( N >=1) && (N <=300));
std::cin >> M;
assert (( M >=1) && (M <=300));
for (int i = 0; i < N; ++i)
    std::cin >> // that's where I have to read the string
                //...and the next string
                // use these 2 strings to update a graph
                // with prGraph.AddEdge()
return 0;
}

2 个答案:

答案 0 :(得分:2)

如果将整个矩阵存储在内存中非常重要,您可以逐行读取并仅存储当前行和上一行,因为它足以正确构建图形。

答案 1 :(得分:1)

使用邻接矩阵的朴素图构造需要300x300 ^ 2,这很难适应内存。

你可以利用每个顶点最多可以有4个边缘的事实 - 只要你使用maxflow的邻接列表,你只需要300 x 300 x 4的空间,只要你相应地更改图形遍历