深度优先搜索算法解决寻路问题

本文介绍了一种基于图的路径搜索算法,通过定义矩阵描述图结构,并实现了深度优先搜索(DFS)来找出两点间的所有可能路径。文章提供了具体示例,展示了如何构造图的矩阵并查找指定起点到终点的所有路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:根据图,输入两个任意顶点a,b,输出所有a->b的路径。

a.首先定义一个矩阵描述这个图

class matrix:
	def __init__(self, n):
		self._Vnum = n 
		self._d = self.init(self._Vnum)

	@staticmethod
	def init(n):
		d = []
		for i in range(0, n):
			t = []
			for j in range(0, n):
				t.append(0)
			d.append(t)
		return d

	def set(self, b, e, weight):
		if b == e:
			print('没有边从自己到自己')
			return 
		elif b > self._Vnum or e > self._Vnum:
			print('错误的输入')
			return

		self._d[b-1][e-1] = weight

b.dfs的实现(arr.pop() 换成arr=arr[:-1]可行吗?如果不可行,是为什么)

 	def path(self, b, e):
		self.dfs(b-1, e-1, {}, [])


	def dfs(self, b, e, visit, arr):
		if visit.get(b):
			return 
		if b == e:
			print(arr)
			return
		else:
			visit[b] = True
			for i in range(0, self._Vnum):
				if 0 == self._d[b][i]:
					continue
				t = [b+1,i+1, self._d[b][i]]
				arr.append(t)
				self.dfs(i, e, visit, arr)
				arr.pop()

			visit[b] = False

c.最后根据图构造一下矩阵

m = matrix(6)
m.set(1,2,5)
m.set(1,4,7)
m.set(2,3,4)
m.set(3,1,8)
m.set(3,6,9)
m.set(4,3,5)
m.set(4,6,6)
m.set(5,4,5)
m.set(6,1,3)
m.set(6,5,1)
print('1 - 6:')
m.path(1,6)
print('6 - 1:')
m.path(6,1)

m.path(1,6)是求顶点1到顶点6的所有路径

m.path(6,1)是求顶点6到顶点1的所有路径

结果如图:

ps:同理可以构造几条交叉的地铁线路,用来简单寻路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值