PYTHON数据结构图实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python图的实现
#!/usr/bin/python
#coding=utf-8
from collections import deque
class photo():
def__init__(self):
self.node_n={}
def add_nodes(self,nodelist):
for i in nodelist:
self.add_node(i)
def add_node(self,node):
if not node in self.nodes():
self.node_n[node]=[]
def add_edge(self,edge):
u,v=edge
if(v not in self.node_n[u])and(u not in self.node_n[v]): self.node_n[u].append(v)
if u!=v:
self.node_n[v].append(u)
def nodes(self):
return self.node_n.keys()
def deep(self,root=None):
self.visited={}
order=[]
def dfs(node):
self.visited[node]=True
order.append(node)
for i in self.node_n[node]:
if not i in self.visited:
dfs(i)
if root:
dfs(root)
for node in self.nodes():
if not node in self.visited:
dfs(node)
print"娣卞害锛?,order
return order
def wide(self,root=None):
self.visited={}
d=deque([])
order=[]
def bfs():
while len(d)>0:
node=d.popleft()
self.visited[node]=True
for i in self.node_n[node]:
if not i in d and not i in self.visited:
bfs()
if root:
d.append(root)
order.append(root)
bfs()
for i in self.nodes():
if i not in self.visited:
d.append(i)
order.append(i)
bfs()
print"骞垮害锛?,order
return order
if__name__=="__main__":
p=photo()
p.add_nodes([i+1for i in range(9)])
p.add_edge((1,2))
p.add_edge((1,3))
p.add_edge((2,4))
p.add_edge((2,5))
p.add_edge((4,8))
p.add_edge((5,8))
p.add_edge((3,6))
p.add_edge((3,7))
p.add_edge((6,7))
print p.nodes()
p.wide(1)
p.deep(1)