【发布时间】:2009-07-24 20:43:23
【问题描述】:
我有一个包含四个节点的图,每个节点代表一个位置,它们的布局就像一个二维网格。每个节点与所有(根据位置)相邻节点都有一条连接(一条边)。每条边也有一个权重。
这里是用 A,B,C,D 表示的节点,边的权重用数字表示:
A 100 B
120 220
C 150 D
我想构建一个容器和一个算法,以切换具有最高权重的共享边的节点。然后重置该边的权重。每次执行算法时,不能多次切换节点(位置)。
例如,处理上面的,最高权重在边缘 BD,所以我们切换它们。由于没有节点可以多次切换,因此 B 或 D 中涉及的所有边都将被重置。
A D
120
C B
然后,下一个最高权重在唯一的左边,切换它们会给我们最终的布局:C、D、A、B。
我目前正在运行一个非常糟糕的实现。我存储了一长串边,为它们(可能)连接到的节点保存四个值,一个权重值和节点本身的位置。每次请求任何内容时,我都会遍历整个列表。
我是用 C++ 编写的,STL 的某些部分可以帮助加快速度吗?还有,如何避免数据重复?一个节点位置当前在五个对象中。存在的节点本身和指示与它的连接的四个节点。
简而言之,我需要以下帮助:
- 能否以不重复数据的方式进行结构化?
- 发现问题了吗?如果其中任何一个有名称,请告诉我,以便我可以通过 Google 搜索有关该主题的更多信息。
- 快速算法总是不错的。
【问题讨论】:
-
假设边只在网格位置之间正交连接并且网格本身是正方形的,边的数量可以由2n(n+1)给出,其中n=sizex-1=sizey-1 ...如果有帮助的话。来源:research.att.com/~njas/sequences/A046092
标签: c++ algorithm data-structures graph-theory