如何构建连接组件的图形?

时间:2012-11-30 20:37:39

标签: algorithm language-agnostic graph

假设我有一个字符矩阵(A,B,......)。我想找到所有连续的“区域”填充相同的字符,并创建一个图形,其顶点对应于那些“区域”。当且仅当对应区域具有公共边界时,图形顶点才会连接。

例如:

input matrix:
A A B C
A B B B
C C D D

areas:
1(A), 2(B), 3(C), 4(C), 5(D)

output graph (adjacency list):

1(A) - 2(B), 4(C)
2(B) - 1(A), 3(C), 4(C), 5(D)
3(C) - 2(B)
4(C) - 1(A), 2(B), 5(D)
5(D) - 2(B), 4(C)

我的问题是:如何在给定矩阵的情况下构建这样的图形。

显然,我可以这样做;

  • 运行BFS / DFS以查找连接的组件(“区域”)
  • 再次扫描矩阵以找到每个“区域”的邻居。

有没有更简单,更有效的方法呢?

1 个答案:

答案 0 :(得分:1)

我不认为有更好的解决方案 一些优化可能会将字符转换为int。 但这不会改变大O符号的努力。

有些人可能希望将信息存储在位字段中以赢得速度竞赛, 但这不值得付出努力,代码也不可读。