如何在深度优先搜索算法中实现目标状态(Python)?

我正在尝试使用深度优先搜索(DFS)来遍历我的图。我的函数是dfs(cost_matrix, start_point, goals_array)。我希望将DFS算法到达任何一个目标状态的路径存储在一个列表中。我无法确定在遍历过程中何时应该向列表中添加或移除项目。我知道一旦达到目标状态,我就可以从循环中跳出。我使用的是迭代的DFS堆栈方法。

def DFS_Traversal(cost, start_point, goals):
    num = len(cost)
    visited = [0] * num
    visited[start_point] = 1
    stack = []
    stack.append(start_point)
    l = [] #用于存储最终路径
    l.append(start_point)
    while(len(stack)):
        s = stack.pop()
        if(visited[s] == 0):
            visited[s] = 1
            if s in goals:
                break
            for i in range (1, num): #遍历矩阵
                if (cost[s][i] != -1 || cost[s][i] != 0):
                    stack.append(i) #向堆栈中添加成员
    return l

回答:

稍微修改了一下,以适应问题中的要求,并在找到其中一个目标时中断 – 来自这里

from collections import defaultdict   # 这个类使用邻接表表示法表示有向图
class Graph:
    # 构造函数
    def __init__(self):
        # 默认字典用于存储图
        self.graph = defaultdict(list)
    # 向图中添加边的函数
    def addEdge(self, u, v):
        self.graph[u].append(v)
    # DFS使用的函数
    def DFSUtil(self, v, visited, goals):
        # 标记当前节点为已访问并打印
        print(" ")
        visited[v] = True
        for goal in goals:
            if v == goal:
                print(f"找到 {v} - 完成!")
                return
        print(v, end = ' ')
        # 递归处理与此顶点相邻的所有顶点
        for i in self.graph[v]:
            if visited[i] == False:
                self.DFSUtil(i, visited, goals)
    # 执行DFS遍历的函数。它使用递归的DFSUtil()
    def DFS(self, v, goals):
        # 标记所有顶点为未访问
        visited = [False] * (max(self.graph)+1)
        # 调用递归辅助函数以打印DFS遍历
        self.DFSUtil(v, visited, goals)
# 驱动代码
# 创建图,图如上图所示
g = Graph()
g.addEdge(0, 1)
g.addEdge(0, 2)
g.addEdge(1, 2)
g.addEdge(2, 0)
g.addEdge(2, 3)
g.addEdge(3, 3)
print("以下是从顶点2开始的DFS")
g.DFS(2, [1,4])

输出:

以下是从顶点2开始的DFS
2  0  找到 1 - 完成!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注