用于创建路径的Java代码

时间:2013-03-17 20:08:18

标签: java

尝试在java中编写代码。请建议适用于此方案的任何算法。  输入是:

Col A   Col B
A       B
A       C
B       D
C       A
C       B
C       E
D       A
D       B
E       A

我正在尝试组合输出:

A   B   D   A       
A   C   A           
A   C   B   D   A   
A   C   E   A       
B   D   B           
C   A   B   D   A   C
C   A   C           
C   B   D   A   C   
C   E   A   C

|
|
|

等等。 输出应该具有相同的起点和终点。

另一种看待它的方法是,你从一个节点A开始,你必须回到节点A,所以你的路径是从A到B然后是B到D(因为从B到你只能去一个节点即D),然后D到A.因此,col A和Col B为您提供了可能的路径,例如A,您只能转到B和C,而不是D和E.我希望这会有所帮助。 还有,有没有办法限制否。解决方案的节点?

请提出一些建议。

2 个答案:

答案 0 :(得分:0)

你需要使用递归,当你通过数据递归时,你需要标记你去过的地方,这样你就不会无限地走同一条路径,

答案 1 :(得分:0)

根据您的数据,您有五个不同节点的集合 - A,B,C,D和E.

如果我们将它们组合在一起,那么我们将得到与什么有关的映射:

A:  [B, C]
B:  [D]
C:  [B, E]
D:  [A, B]
E:  [A]

以上代表sparse graph。除了B-> D-> B之外,节点不直接从另一个节点连接回自身。

以下是我如何处理它的流程。

  • 对我到达的主节点以及此节点所连接的边缘使用Map<String, List<String>

  • 选择一个起始节点 a 。将其链接放入堆栈。

  • 检查结束节点是否与开始相同。
    • 如果是,你已经完成了 - 从堆栈中弹出元素并获取你的路径。
    • 如果不是,则从堆栈中弹出第一个元素并将其链接推入堆栈。从检查中重复。
  • 如果没有要弹出的内容,则 a 没有路径。

这种遍历方式是depth first search。你要深入到图表中,直到你走上你的路径或用尽你的选择。