首页 > 编程语言 >图论算法代码

图论算法代码

时间:2023-08-23 22:33:29浏览次数:39  
标签:图论 graph 代码 vertex add self list 算法 节点

当参加数学建模竞赛时,图论算法是一个常用的解决方案之一。以下是一个使用Python实现的深度优先搜索(DFS)算法示例,用于遍历图的所有节点:

点击查看代码
class Graph:
    def __init__(self):
        self.adjacency_list = {}
    
    def add_edge(self, u, v):
        if u not in self.adjacency_list:
            self.adjacency_list[u] = []
        if v not in self.adjacency_list:
            self.adjacency_list[v] = []
        
        self.adjacency_list[u].append(v)
        self.adjacency_list[v].append(u)
    
    def dfs(self, start_vertex):
        visited = set()
        self._dfs_helper(start_vertex, visited)
    
    def _dfs_helper(self, vertex, visited):
        visited.add(vertex)
        print(vertex)
        
        neighbors = self.adjacency_list[vertex]
        for neighbor in neighbors:
            if neighbor not in visited:
                self._dfs_helper(neighbor, visited)

# 创建图对象
graph = Graph()

# 添加边
graph.add_edge('A', 'B')
graph.add_edge('A', 'C')
graph.add_edge('B', 'D')
graph.add_edge('B', 'E')
graph.add_edge('C', 'F')
graph.add_edge('C', 'G')

# 从指定节点开始进行深度优先搜索
start_vertex = 'A'
graph.dfs(start_vertex)

在上述代码中,我们实现了一个Graph类,其中包括了添加边、深度优先搜索等方法。你可以根据具体问题的要求进行以下修改:

1.添加边:通过调用add_edge(u, v)方法添加图中的边,其中u和v是边的两个节点。

2.深度优先搜索:通过调用dfs(start_vertex)方法进行深度优先搜索,其中start_vertex是指定的起始节点。

3.在深度优先搜索算法中,我们使用了一个集合visited来记录已经访问过的节点,防止重复访问。在每次访问一个节点时,我们先将其标记为已访问,并输出节点的值。然后,遍历该节点的邻居节点,如果邻居节点没有被访问过,则递归调用_dfs_helper(neighbor, visited)方法继续访问邻居节点及其后续节点。

注意,以上代码仅为深度优先搜索算法的示例,实际问题可能需要更多的自定义代码和参数调整,请根据具体情况进行相应的修改。在图论算法中,还有其他许多常用的算法,如广度优先搜索、最短路径算法、最小生成树算法等,你可以根据具体需求选择适当的算法进行实现。

标签:图论,graph,代码,vertex,add,self,list,算法,节点
From: https://www.cnblogs.com/angetenar/p/17652926.html

相关文章

  • 模拟退火算法代码
    当参加数学建模竞赛时,模拟退火算法是一个常用的解题方法之一。以下是一个简单的模拟退火算法的代码示例,用于解决旅行商问题(TSP):点击查看代码importmathimportrandomdefdistance(point1,point2):#计算两个点之间的欧几里德距离returnmath.sqrt((point1[0]-poi......
  • 神经网络算法
    以下是一个简单的神经网络算法的代码示例,用于解决二分类问题:点击查看代码importnumpyasnp#定义激活函数defsigmoid(x):return1/(1+np.exp(-x))#定义神经网络类classNeuralNetwork:def__init__(self,input_size,hidden_size,output_size):......
  • ChatGPT 问答00021 java 对字符串进行高度压缩的算法
    Java中对字符串进行高度压缩的算法有很多种,下面我介绍两种常见的方法。Run-LengthEncoding(RLE)算法RLE算法是一种简单且高效的字符串压缩算法。它通过将连续重复的字符序列替换为一个字符和其重复次数的表示来实现压缩。示例代码如下:publicstaticStringcompressStrin......
  • 基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA
    基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA目录基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA安全测试中思路单向散列加密-MD5单向散列加密算法的优点有(以MD5为例):单向散列加密的缺点常见的单向散列加密算法有:MD5密文特点:解密需求:对称加密......
  • 扩展功能_代码生成器
            ......
  • C#插入排序算法
    插入排序实现原理插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。具体实现步骤如下首先咱们假设数组长度为n,从第二个元素开始,将当前元素存储在临时变量temp中。从当前元素的前一个位置开始向前遍历,比较temp与每个已排......
  • 一个意外错误使你无法创建该文件。如果你继续收到此错误,可以使用错误代码来搜索有关此
     解决方法:正确方法应该是以管理员权限打开cmd,然后执行 icaclsc:\/setintegritylevelM ......
  • 算法模板(1)——高精度
    #include<cstdio>#include<iostream>#include<string>#include<algorithm>usingnamespacestd;constintMR=1e3+2;structBig{ intl; intnum[MR]; voidset(strings){ //用s设置l与num[]的值 l=s.size(); for(inti=1;i<=......
  • 《408操作系统 》复习笔记 ③ 第二章 调度与调度算法
    调度当有一堆任务要处理,由于资源有限,没办法同时处理。需要某种规则来决定处理这些任务的顺序作业作业:一个具体的任务用户向系统提交一个作业=用户让操作系统启动一个程序(来处理一个具体的任务)调度的三个层次高级调度(作业调度)按照某种策略从外存的作业后备队列中挑选......
  • 【成果展示】go-astilectron实现的算法工具
    仓库地址:https://github.com/go-astilectron-demo-crypt_tools......