Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么可以';t BFS将无向图转换为DAG?_Algorithm_Graph_Breadth First Search_Directed Acyclic Graphs - Fatal编程技术网

Algorithm 为什么可以';t BFS将无向图转换为DAG?

Algorithm 为什么可以';t BFS将无向图转换为DAG?,algorithm,graph,breadth-first-search,directed-acyclic-graphs,Algorithm,Graph,Breadth First Search,Directed Acyclic Graphs,假设我有一个连通无向图G,我想把G转换成DAG。解决方案对我来说很清楚:我将为每个节点分配一个数字,然后,仅当分配给u的数字小于v时,每条边(u,v)将指向u->v 然而,这不是我最初的解决方案。起初,我想,为什么不干脆开BFS呢?我知道BFS永远不会生成循环,只会生成树或交叉边(不会创建循环)。我知道BFS对于有向图是有问题的,但是给定的图G是无向的。有人告诉我BFS在这里不起作用,但没有人告诉我为什么。我试着自己去想为什么,但我还是不明白 谢谢 BFS工作正常。如果按照发现顶点的顺序处理每个

假设我有一个连通无向图G,我想把G转换成DAG。解决方案对我来说很清楚:我将为每个节点分配一个数字,然后,仅当分配给u的数字小于v时,每条边(u,v)将指向u->v

然而,这不是我最初的解决方案。起初,我想,为什么不干脆开BFS呢?我知道BFS永远不会生成循环,只会生成树或交叉边(不会创建循环)。我知道BFS对于有向图是有问题的,但是给定的图G是无向的。有人告诉我BFS在这里不起作用,但没有人告诉我为什么。我试着自己去想为什么,但我还是不明白


谢谢

BFS工作正常。如果按照发现顶点的顺序处理每个顶点的所有边,则每条边都将从较旧的顶点转到较新的顶点

如果按BFS顺序对顶点进行编号,则结果与编号方案一致


有一些方法可以尝试使用不起作用的BFS。。。但是有办法尝试任何不起作用的事情。

“我被告知……”:我看不出BFS有任何问题。你有关于这项索赔的参考资料吗?如果图形未连接,则可能需要在某个未访问的节点上重新启动BFS,直到覆盖整个图形为止。@trincot Me not!基本上,这是一个来自考试的问题,说明了有问题的解决方案,其中之一是“使用BFS”(遗憾的是,没有解释为什么)。图是连接的(如我所述)。尝试提出一个节点编号方案(基于BFS的运行顺序),以满足您在开始时提出的要求,从而证明它是有效的。如果您想象BFS算法为它找到的每个未访问的节点分配一个不断增加的编号,并且当它找到一个已访问的节点时,它设置从该节点到当前节点的边方向,然后实际上只执行初始解决方案所执行的操作,只是它会更多地控制下一个要编号的节点。特别是,具有跟踪已处理内容的数据结构的BFS将起作用。没有该数据结构的BFS将导致循环的无限遍历(直到内存耗尽)。但无论如何,您都需要该数据结构来记录答案!