Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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
Python 在无向图中寻找长度为4的圈_Python_Algorithm_Graph_Depth First Search_Undirected Graph - Fatal编程技术网

Python 在无向图中寻找长度为4的圈

Python 在无向图中寻找长度为4的圈,python,algorithm,graph,depth-first-search,undirected-graph,Python,Algorithm,Graph,Depth First Search,Undirected Graph,我希望打印找到的长度为4的周期,此代码帮助我正确计算周期数,但我也希望打印这些周期,例如,在这个特定的输入图中,周期为: 0 -> 1 -> 2 -> 3 -> 0 0 -> 1 -> 4 -> 3 -> 0 1 -> 2 -> 3 -> 4 -> 1 但我无法打印它们,有人能帮我打印吗 以下是使用dfs计数的代码: #要计数的Python程序 #长度为n的圈 #在给定的图中。 #顶点数 V=5 def DFS(图形、标记

我希望打印找到的长度为4的周期,此代码帮助我正确计算周期数,但我也希望打印这些周期,例如,在这个特定的输入图中,周期为:

0 -> 1 -> 2 -> 3 -> 0
0 -> 1 -> 4 -> 3 -> 0
1 -> 2 -> 3 -> 4 -> 1
但我无法打印它们,有人能帮我打印吗

以下是使用dfs计数的代码:

#要计数的Python程序
#长度为n的圈
#在给定的图中。
#顶点数
V=5
def DFS(图形、标记、n、垂直、开始、计数):
#将顶点顶点标记为已访问
标记为[vert]=真
#如果找到长度为(n-1)的路径
如果n==0:
#将vert标记为未到访,以便
#它又可以使用了。
标记的[垂直]=假
#检查顶点顶点顶点是否可以以
#顶点起点
如果图形[vert][start]==1:
计数=计数+1
返回计数
其他:
返回计数
#用于搜索每个可能的路径
#长度(n-1)
对于范围(V)内的i:
如果标记为[i]==False且图形[vert][i]==1:
#通过减少搜索路径的DFS
#长度减1
计数=DFS(图,标记,n-1,i,开始,计数)
#将垂直标记为未访问以使其
#再次使用。
标记的[垂直]=假
返回计数
#计算长度的周期
#N在一个无向
#和连通图。
def计数周期(图,n):
#所有顶点最初都标记为未访问。
已标记=[False]*V
#使用v-n+1顶点搜索循环
计数=0
对于范围(V-(n-1))中的i:
计数=DFS(图,标记,n-1,i,i,计数)
#第i个顶点标记为已访问且
#将不再访问。
标记为[i]=True
返回整数(计数/2)
#主要内容:
图=[[0,1,0,1,0],
[1 ,0 ,1 ,0, 1], 
[0, 1, 0, 1, 0], 
[1, 0, 1, 0, 1], 
[0, 1, 0, 1, 0]] 
n=4
打印(“长度的总周期”,n,“是”,计数周期(图,n))```

将您正在访问的节点保留在列表中,并在
dfs
函数中传递它。如果找到循环,请将该路径添加到所有路径的列表中

以下是修改后的代码:

#长度为n的循环
#在给定的图中。
#顶点数
V=5
路径=[]
def DFS(图形、标记、n、垂直、开始、计数、路径):
#将顶点顶点标记为已访问
标记为[vert]=真
#如果找到长度为(n-1)的路径
如果n==0:
#将vert标记为未到访,以便
#它又可以使用了。
标记的[垂直]=假
#检查顶点顶点顶点是否可以以
#顶点起点
如果图形[vert][start]==1:
计数=计数+1
路径。追加(路径)
返回计数
其他:
返回计数
#用于搜索每个可能的路径
#长度(n-1)
对于范围(V)内的i:
如果标记为[i]==False且图形[vert][i]==1:
#通过减少搜索路径的DFS
#长度减1
下一个路径=路径[:]
下一个路径追加(i)
计数=DFS(图形,标记,n-1,i,开始,计数,下一个路径)
#将垂直标记为未访问以使其
#再次使用。
标记的[垂直]=假
返回计数
#计算长度的周期
#N在一个无向
#和连通图。
def计数周期(图,n):
#所有顶点最初都标记为未访问。
已标记=[False]*V
#使用v-n+1顶点搜索循环
计数=0
对于范围(V-(n-1))中的i:
计数=DFS(图,标记,n-1,i,i,计数,[i])
#第i个顶点标记为已访问且
#将不再访问。
标记为[i]=True
返回整数(计数/2)
#主要内容:
图=[[0,1,0,1,0],
[1 ,0 ,1 ,0, 1], 
[0, 1, 0, 1, 0], 
[1, 0, 1, 0, 1], 
[0, 1, 0, 1, 0]] 
n=4
打印(“长度的总周期”,n,“是”,计数周期(图,n))
如果您打印路径列表,您将得到以下信息:
[[0,1,2,3],[0,1,4,3],[0,3,2,1],[0,3,4,1],[1,2,3,4],[1,4,3,2]