python bfs&dfs

#coding=utf-8


from multiprocessing import Queue
#from queue import queue
adj_list = {
	"A":["B","D"],
	"B":["A","C"],
	"C":["B"],
	"D":["A","E","F"],
	"E":["D","F","G"],
	"F":["D","E","H"],
	"G":["E","H"],
	"H":["G","F"]

}
print (adj_list)

visited= {}
level = {}
parent = {}
bfs_traversal_output=[]
queue = Queue()

for node in adj_list.keys():
	visited[node] = False
	parent[node] = None
	level[node] = -1

s = "A"
visited[s] = True
level[s] = 0
queue.put(s)

while not queue.empty():
	u = queue.get()
	bfs_traversal_output.append(u)

	for v in adj_list[u]:
		if not visited[v]:
			visited[v] = True
			parent[v] = u
			level[v] = level[u]+1
			queue.put(v)

print(bfs_traversal_output)

list 加元素 .append 

queue加元素 .put()

list相减:   一个是list1,list1 = [1, 2, 3, 4, 5]
          一个是list2,list2 = [1, 4, 5]

            list3中包括所有不在list2中出现的list1中的元素。

            list3 = list(set(list1) - set(list2))

#寻找某个点距离原点最近的path
v = "G"
path = []
while v is not None:
	path.append(v)
	v= parent[v]
path.reverse()
print(path)

那dfs呢?

#coding=utf-8

adj_list = {
	"A":["B","C"],
	"B":["D","E"],
	"C":["B","F"],
	"D":[],
	"E":["F"],
	"F":[]

} 
color = {}  # W , G, B
parent ={}
trav_time = {}   #[start ,end]
dfs_traversal_output = []

for node in adj_list.keys():
	color[node] = "w"
	parent[node] = None
	trav_time[node] = [-1,-1]


time = 0

def dfs_util(u):
	global time
	color[u] = "G"
	trav_time[u][0] = time
	dfs_traversal_output.append(u)

	for v in adj_list[u]:
		if color[v] == "W":
			parent[v] = u
			dfs_util(v)
	color[u]=  "B"
	trav_time[u][1] = time
	time +=1 

dfs_util("A")
print(dfs_traversal_output)
 

for node in adj_list.keys():
	print(node," ->",trav_time[node])
	

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值