一种算法,用于查找两个10位数字之间的正交路径

时间:2011-03-23 17:37:13

标签: c algorithm math graph-theory

S 为一组10位数字。鉴于 S 中的任意两个数字 v w ,我想知道是否存在数字序列 v = u_0 ,u_1,...,u_k = w 这样:

  1. 每个 u_i 都在 S
  2. 对于每个 i = 1,..,k ,数字 u_ {i-1} u_i 恰好在一个位置不同
  3. 作为一个加号,找到一个算法来找到最短的序列会更好。

    理想情况下,我更喜欢C(或伪代码)解决方案,但我真的非常感谢对这一点的所有建议!谢谢!

2 个答案:

答案 0 :(得分:3)

从S的元素形成图形:u和v相邻,如果它们在一个坐标中不同。

现在给你,做一个广泛的第一次搜索直到你点击v。

答案 1 :(得分:0)

我会将S转换为节点对象的图形,其中每个节点对象包含指向相邻节点的链接。 (在某些编程语言中,将'links'作为'指针'读取。)邻接由序列上的条件2定义,因此通过结果图的任何路径都是与这两个条件匹配的序列。

从那里开始,检查图中两个顶点的连通性是一个简单的问题。最简单的解决方案是breadth-first search。 (该特定算法也恰好找到最短路径。)