利用python实现DFS 两点间所有路径(通信网理论基础–作业参考)
题目要求
代码应能读取规定格式的TXT文档作为输入,格式如下:
5 7 #第一行:图的节点数N,边数V
1 2 #后续V行: 图中每一条边的起点、终点
1 5
2 3
2 4
3 4
3 5
4 5
2 5 #最后一行:待求解目标的起点、终点
代码应以直观的形式输出所有可行路径,以便于结果检查。例如:
2->1->5
…
2->4->3->5
或
2 1 5
…
2 4 3 5
等等
edgeLinks = dict()
size = 0
stack = []
def addEdge(a,b): #该函数进行加边操作 构造一个完整的字典形如
'''edgeLinks{
"1":["2" "5"]
"2":["1" "3" "4"]
"3":["2" "4" "5"]
"4":["2" "3" "5"]
"5":["1" "3" "4"]
}'''
#上式为演示的该函数处理完的结果
global edgeLinks
if a not in edgeLinks:
edgeLinks[a] = set()
if b not in edgeLinks:
edgeLinks[b] = set()
edgeLinks[a].add(b)
edgeLinks[b].add(a)
def Check(graph, s, e, path=[]): # s起点,e终点
path = path + [s]
# print('path',path) 取消注释查看当前path的元素
if s == e:
# print('回溯')
return [path]
paths = []
# 存储所有路径
for node in graph[s]:
if node not in path:
ns = Check(graph, node, e, path)
for n in ns:
paths.append(n)
# print(paths,'回溯')
return paths
def load(): #读取文件并进行节点数边数,起点终点的获取
f = open('D:/python/txt/project1输入样例.txt', 'r') #需要把txt文件路径赋给左侧地址
global size, edgeLinks
size, edgeCount = map(int, f.readline().split())
print("节点数为:%d"%size, "边数为:%d"%edgeCount)
for i in range(edgeCount):
a,b = f.readline().split()
addEdge(a,b)#进入addEdge函数 把边加进去 注意上面已经读过一行 还需要读取边数edgeCount行
# print(a,b)
re = f.readline() #最后一行即 起点a与终点b
f.close()
return re
if __name__ == '__main__':
a,b=load().split() #进入load()函数 a,b为起点和终点Check(graph, a, b)
print("起点:", a, "终点:", b)
allpath = Check(edgeLinks,a,b)
for p in allpath:
print("路径有:%s"%p)
读取如下:(复制后存在txt文档里哦)
5 7
1 2
1 5
2 3
2 4
3 4
3 5
4 5
2 5
输出结果如下:
END
借鉴了点个赞再走哦