algorithm - 如何构建连接组件图?

标签 algorithm language-agnostic graph

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

例如:

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 以找到连接的组件(“区域”)
  • 再次扫描矩阵以找到每个“区域”的邻居。

有没有更简单、更有效的方法来做到这一点?

最佳答案

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

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

关于algorithm - 如何构建连接组件图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652805/

相关文章:

algorithm - Tarjan 的 SCC 算法是否给出 SCC 的拓扑排序?

math - float 学运算是否被破坏?

c++ - 并行运行现有可执行文件的通用方法

algorithm - 找到矩阵的行列式的最佳算法是什么?

java - 如何将知识陈述/关系从文本文件映射到(有向)图

javascript - D3.js:力导向图,边长与边权成正比

linq - 计算假期

c++ - 当我尝试提交 mkbudget spoj 时得到 WA

Python:深度优先搜索(DFS)输出后序号

c++ - 使用邻接表创建图