对标题道歉,不能使用“图论问题名称”。
我正在尝试处理一些数据,我需要在其中提取有关数据中包含的结构的信息。
- 是封闭的空间体积
- 所述封闭空间的体积
编辑: 初始的“原始”数据是一系列字节,我可以访问类似于多维数组。
// X Y Z
data(10, 10, 8); // 0
data(10, 10, 9); // 1
data(10, 10, 10); // 1
data(10, 10, 11); // 1
如果在该位置的数据中存在大于零的值,则此数据结构中的每个邻居都是可能的边缘节点对。所以数据结构中的每个元素/节点可能有六个可能的边。
因为我知道起始位置(种子),所以将这些原始数据转换为类似结构的图形对我来说是微不足道的。
node = dataToGraph(10,10,10); // seed position
node->Edges[0]; // this would correspond to node represented by the value at 9,10,10
// returns null if the value is less than zero. i.e. no edge/node.
数据表示 3D 空间中的结构,每个结构都有一个特定的种子(下方为深灰色),其位置是已知的。从这个位置我需要扫描数据/结构以验证它的完整结构,即没有间隙,如果是,计算它的内部体积。
虽然我确信我能够拼凑出某种解决方案,但它不会是最佳的,并且每个数据集都有数百万个这样的结构要扫描。
我猜我可以使用一个标准的图论解决方案,它比我破解的任何东西都要好。不幸的是,我对这种数学不太熟悉,所以我什至不知道从哪里开始寻找。
下面是三个有效的二维数据切片示例。#3 上的红线说明了我对该示例感兴趣的修剪结构。
一个有效的结构总是有种子,结构是完全封闭的。无效结构将是在完整 3D 结构中的任何位置具有间隙的任何结构,或者种子在其所在的切片上具有两个以上的邻居/边缘。即不得在外表面或内表面上阻塞。
下面立方体的新图片在一定程度上说明了这一点。假设它有一个中空的内部。红色球体是种子,蓝线表示单个切片,在 2D 示例中为 #1。不幸的是,它永远不会成为像这样规则的结构,因此需要 imo 图形算法。
如果有人能提供一些关于从哪里开始的指示,我将不胜感激。我不指望有人给我代码,只是为了教育我;)