`
javasee
  • 浏览: 973327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一步一步写算法(之图添加和删除)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


前面我们谈到的图的数据结构图的创建,今天我们就来说一说如何在图中添加和删除边。边的添加和删除并不复杂,但是关键有一点需要记住,那就是一定要在小函数的基础之上构建大函数,否则很容易出现错误。


一、边的创建

边的创建一般来说可以分为下面以下几个步骤:

1)判断当前图中是否有节点,如果没有,那么在pGraph->head处添加一条边即可

2)如果当前图中有节点,那么判断节点中有没有以start点开头的,如果没有创建一个顶点和边,并插入图的head处

3)在当前有节点start中,判断是否end的边已经存在。如果end边存在,返回出错;否则在pVectex->neighbour处添加一条边

4)添加的过程中注意点的个数和边的个数处理


二、边的删除

在进行边的删除之前,我们需要对链表子节点进行处理,构建delete小函数,这样可以在边删除函数中使用。

一般来说,边的删除和边的添加是可逆的,过程如下所示:

1)判断图中是否有节点存在,如果没有,返回出错

2)判断图中节点start是否存在,如果不存在,返回出错

3)判断节点start中是否end边存在,如果不存在,返回出错

4)删除对应的边

5)判断该节点的边计数number是否为0,如果为0,继续删除节点

6)删除过程中注意边和顶点的个数处理


注意事项:

(1)注意写小函数,再复杂的功能都是有无数的小功能构建的,函数最好不要超过50行

(2)老规矩,代码务必要测试

分享到:
评论

相关推荐

    一步一步写算法

    文件"一步一步写算法(之图添加和删除).pdf"可能涉及图的邻接矩阵或邻接表表示,以及如何在图中添加和删除节点或边。 5. **查找算法**: - 查找算法如二分查找、线性查找等是数据结构中基础且重要的部分。"一步一步...

    C++写算法题中各类输入输出、常用函数,算法数据结构

    - `vector`:动态数组,可以方便地添加和删除元素,支持随机访问。 - `unordered_map`:哈希表,提供快速的插入、查找和删除操作,常用于查找是否存在某个元素。 - 当处理算法问题时,根据问题特性选择合适的数据...

    最接近点算法

    最接近点算法是一种在计算机科学和数学中广泛使用的算法,主要应用于几何计算、数据挖掘、图形学和机器学习等领域。它的目标是找到一组点集中距离最近的两个点对。在这个特殊的案例中,算法是通过MFC(Microsoft ...

    算法演示flash,很多算法题,都是有flash版的

    Flash可以形象地展示这些数据结构的添加、删除和查找操作,帮助理解它们的特点和应用场景。 这些算法和数据结构是IT专业人员的基础,理解和掌握它们对于通过技术面试和解决实际问题至关重要。使用“算法演示flash”...

    二分图最大匹配km算法

    在带权二分图中,每条边都被赋予了一个权重,KM算法的目标是在满足匹配条件的前提下,找到一组匹配使得这些匹配边的权重之和最大化。 #### 算法步骤详解 KM算法的基本步骤包括: 1. **初始化可行标杆**:设置X集合...

    数据结构 算法 数据 结构 算法 经典

    图的遍历算法包括深度优先搜索(DFS)和广度优先搜索(BFS)。 10. **排序算法**:常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。每种算法都有其适用场景和时间复杂度。 11. **...

    数据结构与算法教程和算法实例

    6. **哈希表**:通过哈希函数将键映射到数组的特定位置来存储数据,提供快速的查找、添加和删除操作。哈希冲突是其主要挑战。 7. **二叉树**:每个节点最多有两个子节点,常用于实现搜索和排序。二叉搜索树是一种...

    数据结构、算法与应用 C++语言描述 原书第2版.pdf

    链表则允许动态地添加和删除元素,而队列和栈则遵循“先进先出”(FIFO)和“后进先出”(LIFO)原则。 2. **树形结构**:如二叉树、堆、AVL树和红黑树等。二叉树是最常见的树类型,每个节点最多有两个子节点;堆是...

    数据结构与算法(CSTP课件)

    链表则允许动态地添加和删除元素,但访问速度相对较慢;栈是一种后进先出(LIFO)的数据结构,常用于函数调用和表达式求值;队列则采用先进先出(FIFO)原则,常见于任务调度和消息传递。 2. 树形数据结构:二叉树...

    C语言课程设计之普里姆算法

    普里姆算法的基本思想是逐步构建最小生成树,从一个顶点开始,然后在每一步中添加一条与当前生成树连接的新边,这条新边使得生成树增加一个顶点的同时,保持树的总权重尽可能小。以下是普里姆算法的步骤: 1. 初始...

    tsp之 覆盖起点随机算法 cpp示例

    在每一步中,算法会选择一个未访问过的城市,使得添加该城市到当前路径后,路径长度的增加最小。这个过程会一直重复,直到所有城市都被包含在路径中,然后返回到起点结束旅行。 **cpp实现**: C++是一种广泛应用的...

    Java数据结构和算法(超级全面)

    Java数据结构和算法是计算机科学中的基础且至关重要的部分,对于任何Java开发者来说,理解和掌握它们都是提升编程技能的关键步骤。本资源“Java数据结构和算法(超级全面)”提供了全面的学习材料,尤其是针对Java...

    Prim算法计算最小生成树(无向图&邻接矩阵)_算法_数据结构_

    在每一步中,算法都会选择当前未加入树中的顶点,并将其与树中已有的顶点相连的边中权重最小的一条加入到树中。这个过程一直持续,直到所有顶点都被包含在内,形成一棵包括所有顶点的树,且边的总权重达到最小。 **...

    C++实现图的存储、Prim和Kruskal算法

    通过这些源文件,开发者可以实现对图的操作,包括创建、添加边、删除边等,以及运行Prim和Kruskal算法来找到最小生成树。学习和理解这些代码有助于深入理解图论和C++编程。同时,这也是一个很好的实践案例,展示了...

    算法导论第三版 教师用书

    散列表是一种通过哈希函数来处理快速查找、添加和删除数据的数据结构。《算法导论》介绍了散列表的原理以及如何解决冲突等关键问题。 二叉搜索树是一种有序树结构,通过特定的插入和查找策略来实现数据的高效管理。...

    corman 算法导论 教师手册

    **讲座笔记**:贪心算法是一种简单直观的算法设计方法,它通过在每一步都做出局部最优的选择来试图达到全局最优解。本章介绍了贪心算法的基本思想及其适用范围。 **解决方案**:本章的习题解答帮助学生掌握如何判断...

    算法C语言实现(第1-4部分).zip

    链表是一种动态数据结构,允许在运行时添加和删除元素。栈和队列是两种抽象数据类型,分别遵循“后进先出”(LIFO)和“先进先出”(FIFO)的原则。树数据结构包括二叉树、平衡树(如AVL树和红黑树)等,用于高效地...

Global site tag (gtag.js) - Google Analytics