图论

著名的算法有:求最小生成树的Kruskal算法,求最短路径的Dijkstra算法和Floyd算法、求两部图最大匹配的匈牙利算法、求一般图最大匹配的Edmonds花算法、求网络最大流和最小流的算法


显示图:路径问题、连通性问题、可平面性检验、着色问题和网络优化(顶点、边和权重)(邻接矩阵、邻接链表)(深度优先搜索算法、广度优先搜索算法)

隐式图:二维表格上提出的问题,八皇后问题、老鼠走迷宫、五子棋、象棋(子集树、排列树)(不用专门存储)(回溯法、分枝法)


搜索算法:穷举法、启发式搜索(|提前判断哪些状态尽快找到问题解或某个情况不能得到最优解)

树中每个结点确定所求解问题的一个问题状态,由根结点到其他结点的所有路径,就确定了这个问题的状态空间。

解状态:由根到S的那条路径确定了该解空间中的一个元组

答案状态:由根到S的这条路径确定了该问题的一个解

问题状态 ----> 解状态 -----> 答案状态

活结点 ----->   E-结点 ------>  死结点


广度优先搜索

算法设计思路:

1. 确定图的存储方式

2. 设计图搜索过程中的操作

3. 输出问题的结论

算法框架:

活结点的扩展是按先来先处理的原则,算法中要用“队”来存储每个E-结点扩展出的活结点

应用

宽度【1】若干个城市的地图,求一个城市到另一个城市的路径,经过的城市最少

用线性数组作为活结点队列存储空间,队列每个节点有两个成员,入队的城市、前驱城市在队列中的下标

【2】走迷宫问题

数组做队列的存储空间,队中结点有3个成员:行号、列号和前一个方格在队列中下标,搜索过的方格元素设置为-1

循环体用数组fx[]={1,-1,0,0} fy[]={0,0,-1,1}模拟上下左右搜索的下标的变化过程

深度【3】走迷宫

【4】割点

回溯【八皇后】

加约束条件的枚举算法;非递归回溯(深度搜索);递归算法

【马遍历问题】n*m棋盘上,马只能走“日”字,每格走一次,且只走一次

搜索过程:任意一点出发,按深度优先的原则,从8个方向中尝试一个可以走的点,知道走过棋盘上所有n*m个点,用递归调用算法

dep深度,走过的点数;经过用1,未经过用0

分支限界法

在问题解空间上进行搜索尝试的算法。所谓“分支”是采用广度优先的策略,一次搜索E-结点的所有分支。在生成结点中,抛弃那些不满足约束条件的结点,其余结点加入活节点表,然后从表中选择一个结点作为下一个E-结点,继续搜索。有FIFI搜索,LIFO搜索,优先队列式搜索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值