不,他没有测试你。您可以使用两种颜色在图表中检测周期,但在这种情况下图必须是无向的。
如果您没有得到原因,请在评论中提问。
编辑
阐述:
我想强调的是,图是路边缘的基础上2种指向,当我们有一个曲线图,当我们人的边缘前进以及后退在两个顶点之间,图的类型称为无向图。
而下面的图片是有向图。
这两个上纸不同的方式是,我们不画边的方向在无向图中,当我们说存在在无向图的上下文节点A和B之间的边缘,它会自动得出为什么我们谈论反向边缘,原因在于计算机程序中边缘以不同表示方式表示的方式,我们仅指示有向边缘,例如在邻接列表中,节点B将在A的邻接列表中只有存在从A到B的边时,如果需要表明存在从B到A的边,那么我们还需要在B的邻接列表中添加节点A.
类似地,在基于邻接矩阵的表示的情况下,矩阵关于其前导对角线(从左上开始的对角线)对称,以示出对于从A存在到B的每条边,还存在从B到A的边。
所以要实现我们以下
所以,你该更换无向图的所有边后,您会看到计算机的代表图的实际图片的任何无向图。
现在假设你已经被给出了一个图。你必须问哪一个?
无向图
我将在参考交谈第一张图片贴在这里。并假定邻接表表示已被用来表示图。
这将是怎样的?
这里你可以看到:
A:B - > d - >电子 - > NULL
B:A - > d - >电子 - > NULL
C:d - > NULL
d:一 - >乙 - “ç - > NULL
E:A - >乙 - > NULL
的目标是设计出一些策略来检查周期存在与否。
现在假设这些节点代表城市中的一些商店,并且边缘是道路,所以如果您看到从节点A到B的道路,则自动存在从B到A的道路,因为图形是无向的。从邻接列表中也可以看出这一点。
要检测无向图中的一个循环,我们将按照以下过程以一种方式进行,一个典型的程序将遵循。然后你会看到我给出的陈述是有效的。那么我们开始吧。
我们从节点A开始,以心情遍历整个图形,遍历这里意味着你想要访问所有的商店。现在要真正了解你访问过的所有商店,当你离开它们时,你会着色它们,所以你站在节点A,现在你有很多从节点A出现的道路,你可以去其他地方去。所有这些选项都出现在A的邻接列表中。
假设您选择一条通往节点B的道路,然后沿着它前进,离开A,在离开A之前着色它。
现在站在B你第一次看到,是节点着色?你看不到!然后你知道你以前没有访问过这个节点。再次想要做同样的事情,所以你看到B的邻接列表选择下一条路,你看到一条通向A的路,你再次沿着那条路,在你离开时到达A,B。但是,一旦你到达节点A,你就会看到它被着色,这意味着你之前已经访问过这家商店,但是后来你意识到,因为图形是无向的,所以从B到达A不是问题,因为边是双向的,所以你回溯
为了避免这种情况再次使用父数组,其中par [i] = j,如果您从j发现i。现在你已经消除了再次访问父母的陷阱。现在你选择B的下一条路,这是E,你去那里,B,这次设置par [E] = B,当你到达E时,你想再次做同样的事情。但是这一次你看到一条通往A的道路,首先检查你的父母是?因为你不想再次拜访你的父母,因为你是从那里来的。
这里没有。所以你去了A,但只要你到达A,你就会注意到这个节点是彩色的。
,如果这是真的,那么这意味着你已经访问了A,这意味着存在从A再次结束于A的路径,因此是循环。
那么告诉我我们使用了多少种颜色?只有两个,一个是初始颜色,另一个是访问节点后的颜色。
你可以说我已经在这个特定的例子中展示过它,所以过程可能不会总是起作用,但是尝试通过遍历的感觉来实现我描述的情况,并且试着说服自己,如果你从一个节点开始一组道路,如果你到达某处并且看到该节点是有颜色的,这意味着你已经访问了该节点,并且因为你避免访问该节点的父节点,所以你可以看到一个节点着色的唯一方法是由于某个循环。
我让你知道为什么这个东西不能在有向图中工作,双向边的机制在哪里来到这里。
@Hemant Bhargava这里有其他东西给你:-) –
请详细说明。谢谢。 –
@Hemant Bhargava现在给我一个upvote:D –