python实现图的基础算法

        众所周知,广度优先搜索和深度优先搜索是十分常用的算法,它们被应用于图论中,可以用来查找图中的一个元素,而本篇文章将介绍如何用python实现这些功能。

建立树:

        1、顺序存储:

                顺序存储是一种工具简单,消耗脑力的一种方法,这种方法可以直接使用列表进行存储,但要进行各类操作的话十分麻烦,容易被绕晕。

        2、字典存储:
                这种方法在C里面就是结构体,而换成python就是使用字典,为了实现一对多,我们可以设字典的值为一个字典,然后字典套字典,这样就能快速理清思路了。

tree={1:{2:{4:{},5:{}},3:{6:{},7:{}}}

建立图:

         1、二维数组存储:

                这种方法十分费空间,因为会产生大量的无图区,所以非常不建议使用。

         2、连接存储:

                这种方法是大概是这样:

                        设第一维为连接主

                        而第二维为连接者

                        这样就可以使空量为0

                

picture=[]
for i in range(100):
    picture[i]=[]
    for k in range(100):
        picture[i][k]=i

        当然,这只是最初步的,我们重点是要做出算法来。就先从深度优先搜索开始吧。深度优先搜索是采用递归算法实现的,因为深搜需要借助栈来辅助,而是用递归就可以直接使用系统栈。而我们则查找最好的满二叉树。创建方法在上面已经写过了,就不多写了。接着就要理清思路:

 定义函数 深度优先搜索(查找值,当前值,二叉树深度,当前深度):
        如果 当前值==查找值:

                返回 真

        否则如果 当前深度==二叉树深度:

                返回 假

        否则:

                如果 深度优先搜索(查找值,树的(当前值的下标*2)项,二叉树深度,当前深度+1)==真 或者 深度优先搜索(查找值,树的(当前值的下标*2+1)项,二叉树深度,当前深度+1):

                        返回 真

                否则:

                        返回 假

        理清了思路,就好写代码了:

t=[]
for i in range(63):
    t.append(i)
def dfs(k,d,t,dt):
    if k==d:
        return True
    else if t==dt:
        return False
    else:
        if dfs(k,t[t.index(d)*2],t,dt+1)==True or dfs(k,t[t.index(d)*2+1],t,dt+1)==True:
            return True
        else:
            return False
dfs(9,0,1,6)

        深度优先搜索算法搞定了,就该讲广度优先算法,也叫宽度优先算法。这种算法就跟铺地锦一样,它是从远到近蔓延过去的。编程的话就可以先建一个循环,这个循环就作为树的层次,而在这个循环中还要套一个循环,这个循环用于查找这一层内的所有子树的信息:

t=[]
for i in range(63):
    t.append(i)
i=0
k=0
while i<6:
    for i in range(k,k+2^i):
        if t[i]==5:
            print(i) 
    k+=2^i   
    i+=1

        好了关于树的算法就到这里了,由此可见,算法并不限于编程语言,只要思想在,任何编程语言都是可以实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值