我有一个作业,其中我必须编写一种执行有向图DFT的方法。这是有向边:
节点1->节点2,节点3
节点2->节点4
节点3->节点5
节点4->节点5
据我了解,观看this video后,从节点1开始对上述图形进行DFT处理将输出1,2,4,5,3。我的理由是,当看1的边时, 2自然会先于3,然后线性地进行直到到达5。由于5除了与4的连接外没有其他边,因此遍历将“退回”到节点1,之后它将输出节点3。
但是,分配期望输出1、3、5、4、2。我的逻辑问题出在哪里?
编辑:我不确定我误解了分配的哪一部分,但是解决方案是在打印第一个元素之后,遍历一个节点会将其添加到堆栈中,但是预期的输出是元素离开堆栈的顺序。浏览图形,从节点1开始,然后首先到达节点2(因为分配要求是您按自然顺序在节点之间进行选择),然后将节点2添加到堆栈中。然后,您继续遍历节点2导致的节点,使堆栈为2、4、5。然后,返回2和3之间的选择,将3加到堆栈中,弹出堆栈的每个元素,输出他们随你去。因此,首先打印1,然后弹出堆栈中的元素,得到3、5、4、2。
答案 0 :(得分:3)
我相信您的逻辑是正确的,正确答案是1,2,4,5,3。作业必须有一个错误。
请记住,如果在节点2之前访问了节点3,那么{1,3,5,2,4}也将是可接受的答案。
答案 1 :(得分:3)
您的逻辑没有错。您的结果与预期的输出(1)一样有效。
我这样做的原因是,当看1的边缘时,2会 自然会在3点之前出现
图中没有任何东西可以支持此顺序或其他顺序。因此,由您决定要先遵循两条边中的哪一条。
(1)阅读加百列的回答后,我不得不承认我没有在“预期输出”中看到明显的错误:
如果从节点1开始,我们在2之前访问3,然后到达5,则回溯将使我们回到节点1,并且从那里必须首先是2然后是4:{1、3、5 2,4},而不是{1,3,5,4,2}。