形式语义学关于带权有向图最短路径的有模式函数算法
具体思路来源于人工智能原理课程中的GraphSearch算法,初始输的的是OPEN格式的开始节点,空的CLOSED表,权值0,完整的带权有向图(GRAPH格式),和目标节点(INT)
①findMiniPath: OPEN(点集 OPEN表)àCLOSED(CLOSED集)àCOST(COST当前路径费用)àGRAPH(带权有向图)àINT(目标节点)àINT*(最短路径序列)
OPENà(INT x INT x INT)*
CLOSEDà(INT x INT x INT)*
COSTàINT 权值
GRAPHàNODE* 点集
NODEàINT x LINK*
LINKàINT x WEIGHT 点集的后继节点包括权值
WEIGHTàINT
findMiniPath op:open closed cost gra aim
=let (now,previous,weight)=op in
now=aimàfindPreviousList op:closed,//判断目标并根据closed前驱找出序列
.let forwardList=explore now gra in
.op:closed , cost=weight ,
udateWeight forwardList cost //更新权值,将节点的权值与cost相加
. existOpen=ifExistNodeInOpen open forwardList (找到与open表中重合的点)
case existOpen of:
[ ]à let newopen=sortList open:forwardList in
//forwardList中的节点都不在open中
findMiniPath newopen closed cost gra aim
existOrder:existOpenàletrec open=modifyOpen existOrder:existOpen open in
//修改open集合,如果existOpen中权值比
open中的权值小则修改open中的前驱和权
值,否则不变
let newopen=sortList open in
findMiniPath newopen closed cost gra aim
//存在节点在open集合中,并取出第一个点
②explore: INTàGRAPHàNODE*àFORWARD*
FORWARDà(INT x INT x INT)
explore now temp:gra=let (node,link)=temp in
node=nowàmakeForward link now ,
explore now gra
③makeForward:LINK*àINTàFORWARD* //根据open和now制作open节点
FORWARDà(INT x INT x INT)
makeForward temp:link now=let (backnode,backweight)=temp in //backnode后继结点
let forward=(backnode , now , backweight) in
forward:makeForward link now //返回后继结点
④ifExistNodeInOpen: OPENàFORWARD*àOVERIDE*
OVERIDEà (INT x INT x INT) //表示返回重合的节点
ifExistNodeInOpen open forward:forwardList=let (backnode,previous,weigth)=forward in
b=findOpen backnode open ,
case b of:
ttàforward : ifExistNodeInOpen
..open forwardList
ffà ifExistNodeInOpen open
forwardList
⑤findOpen: INTàOPENàBOOL
OPENà(INT x INT x INT)*
//在open集合中查询是否有该后继结点
findOpen backnode op:open=let (opnode,opprevious,weight)=op in
backnode=opnodeàtt,
findopen backnode open
⑥sorList: OPENàOPEN //对open根据权值大小进行排序
//思路看是否能找到一个节点的权值比其他的都小
sortlist op:open=let (opnode,opprevious,weight)=op in
b=pdWeightMini weight open ,
case b of:
ttàop:open
ffàsortlist open:op //自动查找下一个
⑦pdWeightMini: INTàOPENàBOOL
pdWeightMini weight op:open=let (a,b,opweight)=op in
opweight<weightàff,
pdWeightMini weight open
pdWeightMini weight [ ]=tt //当遍历完成后没有比他小的,则成功
⑧modifyOpen: OPENàOPENàOPEN 对重叠的节点和原有的open集节点比较并修正
modifyOpen existOrder:existOpen op:open=
let (existnode,existprevious,weight)=existOrder in
let (opnode,opprevious,opweight)=op in
existnode=opnode
à (weight<opweight
àexistOrder:modifyOpen existOpen open ,
op: modifyOpen existOpen open ) ,
modifyOpen existOrder:existOpen open:op//查重叠点
⑨updateWeight: FORWARD*àINTàFORWARD*
updateWeight tempf:forwardlist cost=let (a,b,weight)=tempf in
let newweight=weight+cost in
(a,b,newweight) : updateWeight forwardlist cost
updateWeight [ ] cost=[ ] //更新权值结束出口
⑩findPreviousList: CLOSEDàINT* //回溯求路径
findPreviousList temp:closed=let (a,previous,b)=temp in
previous:findPreviousList closed
findPreviousList [ ]=[ ]//递归出口
形式语义学关于带权有向图最短路径的有模式函数算法相关推荐
- C++ 实现带权有向图的单源点最短路径Dijkstra算法(完整代码)
首先,引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v0到每个终点vi的最短路径的长度. 它的初态为:若从v0到vi有弧,则D[i]为弧上的权值:否则,置D[i]为∞. 显然,长度为 ...
- 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大
信息举报 时间:2020-12-23 本页为您甄选多篇描写带权有向图的邻接矩阵中0和无穷大,带权有向图的邻接矩阵中0和无穷大精选,带权有向图的邻接矩阵中0和无穷大大全,有议论,叙事 ,想象等形式.文章 ...
- HOJ 2739 The Chinese Postman Problem 带权有向图上的中国邮路问题
[题目大意] 带权有向图上的中国邮路问题:一名邮递员需要经过每条有向边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少.(2 <= N <= 100, 1 < ...
- HOJ 2739 网络流【带权有向图上的中国邮路问题】
[带权有向图上的中国邮路问题] #include<cstring> #include<cstdio> #include<algorithm> #include< ...
- P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序。
P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序. 头文件1:SeqList.h #include<stdio.h>#define M ...
- C++ 实现带权有向图的每对顶点之间的最短路径Floyd算法(完整代码)
基本思想是: 假设求从顶点vi到vj的最短路径. 如果从vi到vj有弧,则从vi到vj存在一条长度为arcs[i][j]的路径,该路径不一定是最短路径,尚需进行n次试探. 首先考虑路径(vi, v0, ...
- 为什么Prim算法不适用于带权有向图
其实,能不能使用Prim算法计算图的最小生成树,和这个图是有向图还是无向图,这两者之间没有必然的联系. 而是,如果在有向图中出现了以下情况,那么就不能使用Prim算法: 假设一个有向图有3个顶点 1- ...
- 【数据结构与算法】带权图最短路径Dijkstra算法
伪代码 //u是源节点 Initialization: N' = {u} for all nodes v if v is a neighbor of u then D(v) = c(u,v) e1se ...
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...
- java有向图最短路径_单源最短路径之Java实现(使用Java内置优先队列)
import java.util.*; /** * 用堆实现了从一个点到其他点的最短路径 * @author 李赫元 */ public class ShortestPath { /**有n个节点*/ ...
最新文章
- C#——文件处理和字符串处理DEMO
- SAP ERP classification和C4C的同步
- 主动给团队或用户安装Teams App
- 2019计算机应用基础期末考试试题,2019-2020年度公共课计算机应用基础考试试题附答案...
- 创意购物海报|吸引你的不止买买买,更是创意!
- mysql按 当前时间和规定时间大小排序_为什么 MySQL 使用 B+ 树· Why#x27;s THE Design?(009)...
- 信号检测与判决的五大准则
- HPGL(PLT文件格式)文件解析及VS2017工程源码
- cad详图怎么画_CAD施工图怎样能画的快?老师傅教你20个制图诀窍,远超他人!
- 软件测试入门及实战篇
- 数字电路基础:系统设计优化
- 计算机相关设备巡检表,电脑维护巡检方案
- 关于信息墒与压缩编码基础的学习
- 计算机考研常考:广义表的定义以及数据结构,你都会了吗?
- 联想小新+Windows10+Ubuntu18.04双系统安装+引导设置过程全记录
- 大咖集结,共创生态|AIOps社区专家团正式集结出道
- padding的用途
- 威尔特拉斯定理_数学大师启示录维尔斯特拉斯.pdf
- 256qam是什么意思_一文读懂5G的信号调制方式!5G比4G的快的主要原因就是256QAM
- 重磅:世纪大和解!阿里、腾讯生态将打通