【数据结构】 Python实现深度优先搜索DFS

代码实现

import numpy as np

def visit(v):
    return print(str(v) + "->",end='')

def FirsNeighbor(v):
    t = -1
    for i in range(g.shape[0]):
        if g[v][i] == 1:
            t = 1
            break
    if(t == 1):
        return i
    else:
        return t
        
def OpenDoor(p):
    if(visited[p] == True):
        return 0
    else:
        return 1

def NextNeighbor(v,w):
    l = []
    for i in range(g.shape[0]):
        if g[v][i] == 1:
            l.append(i)
            
    if(len(l) > 1 and OpenDoor(l[1])):
        return l[1]
    else:
        return -1

def DFS(g, v):
    visit(v)
    visited[v] = True

    w = FirsNeighbor(v)
    while(w >= 0):
        if(visited[w] == False):
            DFS(g,w)
     
        w = NextNeighbor(v,w)
            
            
if __name__ == "__main__":
    
    g =np.array([[0,1,0,0,1,0],
                 [1,0,0,0,0,1],
                 [0,0,0,1,0,1],
                 [0,0,1,0,0,0],
                 [1,0,0,0,0,0],
                 [0,1,1,0,0,0]])
    
    visited = np.zeros(g.shape[0])
    queue = [0]
    DFS(g, 0)

        
    

运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图的深度优先搜索DFS)和广度优先搜索(BFS)是图的两种主要遍历算法。在数据结构图中,可以使用邻接矩阵或邻接表来存储图的结构。 深度优先搜索DFS)是一种用于遍历或搜索图的算法。它从起始顶点开始,沿着一条路径走到底,然后回溯并探索其他路径。DFS使用栈来保存待访问的顶点,通过不断地将相邻的未访问顶点压入栈中,并在访问过后将其弹出,直到栈为空为止。 广度优先搜索(BFS)是一种用于遍历或搜索图的算法。它从起始顶点开始,逐层地访问其所有相邻的顶点,然后再访问这些相邻顶点的相邻顶点。BFS使用队列来保存待访问的顶点,通过不断地将相邻的未访问顶点加入队列,并在访问过后将其出队,直到队列为空为止。 以下是一个示例代码实现: ```python #define MaxVertexNum 100 typedef struct ArcNode{ struct ArcNode *next; int adjVertex; }ArcNode; typedef struct VNode{ ArcNode *next; elemtype data; }VNode, adjList = false; } Stack S; InitStack(S); int i, j; // 访问v,并将v压入栈中 visited[v = true; push(S, v); // 循环直到栈空 while(!IsEmpty(S)){ // 弹出栈顶元素 pop(S, i); // 访问i所有的邻接结点 for (j = FirstNeighbor(G, i); j >= 0; j = NextNeighbor(G, i, j)){ // 将j压入栈中 if (!visited[j]) { visited[j = true; push(S, j); } } } } void BFS(ALGraph G, int v){ // 初始化visited数组 for (int i = 0; i < MaxVertexNum; i++){ visited[i = false; } Queue Q; InitQueue(Q); int i, j; // 访问v,并将v加入队列中 visited[v = true; enqueue(Q, v); // 循环直到队列为空 while(!IsEmpty(Q)){ // 出队列 dequeue(Q, i); // 访问i所有的邻接结点 for (j = FirstNeighbor(G, i); j >= 0; j = NextNeighbor(G, i, j)){ // 将j加入队列中 if (!visited[j]) { visited[j = true; enqueue(Q, j); } } } } ``` 通过调用DFS函数可以进行图的深度优先搜索,调用BFS函数可以进行图的广度优先搜索。这样可以遍历或搜索整个数据结构图的顶点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值