开篇 用python写的深度优先链表递归遍历

深度优先递归变遍历,用链接矩阵的方法

 

   源程序如下:

# -*- coding: cp936 -*-
#程序实现了图的深度优先递归遍历,用链接矩阵的方法,所用语言python
visited=[]#全局链表变量,用以标识顶点被访问过与否
depth=[]#全局变量链表用以存放深度优先遍历结果
class graph:#定义一个图的类,变量依次包括顶点个数,边数,存放顶点的链表,存放边的矩阵
    def __init__(self):
        
        self.Vnum=0
        self.Enum=0
        self.aList=[]
        self.matrix=[[]]
        
        
def DFS(a,ii):   #深度优先遍历递归函数,调用本身实现遍历      
  
  jj=0
  visited[ii]=1
  
  depth.append(a.aList[ii])
  #print a.aList[ii]
  for jj in range (a.Vnum):
      if a.matrix[ii][jj]==1  and visited[jj]==0:#若哪个顶点(jj)与ii顶点的在连接矩阵中下标一致的值是1的话,就访问这个jj点,把它的标记改为1
        DFS(a,jj)
      
    




def DFSTra(a):
   
   ii=0
   for ii in range (a.Vnum):
       visited[ii]=0#将所有顶点标记为未访问过
   for ii in range (a.Vnum):#从第0个顶点开始访问
       if visited[ii]==0:
          
          DFS(a,ii)
   
 #主函数 
         
if __name__ == '__main__':
    ii=0
    k=0
    t=0
    a=graph()#定义图的一个对象
    integer1=raw_input("Enter the num of V:")#顶点数
    a.Vnum=int(integer1)
    print "Enter the num of E:"#边数
    a.Enum=int(raw_input())
    a.matrix= [[0] * a.Vnum for row in range(a.Vnum)]#二维矩阵定义,以便给每个矩阵元素赋值
    print "输入各个顶点:"#输入各个顶点名称
    for ii in range(a.Vnum):
        char1=raw_input()
        a.aList.append(char1)
    print a.aList,
    for ii in range(a.Vnum):#把所有顶点置为未访问过
        integer=0
        visited.append(integer)
    print " "
    print "V-to-V:"#以顶点对来表示边
    for i in range (a.Enum):#整个for循环,是用矩阵下标的方式把每条边表示出来
      j=0
      char1=raw_input()
      #print "char1=",char1#测试
      char2=raw_input()
      for j in range (a.Vnum):#找到一条边的第一个点在链表中的下标,并且赋给k
        if char1==a.aList[j]:
           k=j
           #print "k=",k#测试
           break
        else:
           continue
      j=0
      
      for j in range (a.Vnum):#找到一条边的第二个点在链表中的下标,并且赋给t
        if char2==a.aList[j]:
           t=j
           #print"t=",t#测试
           break
        else:
           continue 
      a.matrix[k][t]=1
      a.matrix[t][k]=1#把以相连的两个点(第t个值和第k个值)为下标的矩阵值置为1,真
      print (a.aList[k],a.aList[t])
      #aa=0
      #bb=0
    #for aa in range(a.Vnum):#测试矩阵的输出值,发现输出不对,注意第39行二维矩阵定义
     #   for bb in range(a.Vnum):
      #     print(a.matrix[aa][bb])
       # print ","


    #DFS(a,0)
    print "深度优先遍历链表遍历结果为:"   
    DFSTra(a)#进行深度优先遍历
    print depth,   
                         

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值