我有一个长方形房间;其'地板覆盖着地板,其中一些是破碎的。
房间的尺寸为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;
}
答案 0 :(得分:2)
如果将整个矩阵存储在内存中非常重要,您可以逐行读取并仅存储当前行和上一行,因为它足以正确构建图形。
答案 1 :(得分:1)
使用邻接矩阵的朴素图构造需要300x300 ^ 2,这很难适应内存。
你可以利用每个顶点最多可以有4个边缘的事实 - 只要你使用maxflow的邻接列表,你只需要300 x 300 x 4的空间,只要你相应地更改图形遍历