具体思路来源于人工智能原理课程中的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 [ ]=[ ]//递归出口

形式语义学关于带权有向图最短路径的有模式函数算法相关推荐

  1. C++ 实现带权有向图的单源点最短路径Dijkstra算法(完整代码)

    首先,引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v0到每个终点vi的最短路径的长度. 它的初态为:若从v0到vi有弧,则D[i]为弧上的权值:否则,置D[i]为∞. 显然,长度为 ...

  2. 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大

    信息举报 时间:2020-12-23 本页为您甄选多篇描写带权有向图的邻接矩阵中0和无穷大,带权有向图的邻接矩阵中0和无穷大精选,带权有向图的邻接矩阵中0和无穷大大全,有议论,叙事 ,想象等形式.文章 ...

  3. HOJ 2739 The Chinese Postman Problem 带权有向图上的中国邮路问题

    [题目大意]  带权有向图上的中国邮路问题:一名邮递员需要经过每条有向边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少.(2 <= N <= 100, 1 < ...

  4. HOJ 2739 网络流【带权有向图上的中国邮路问题】

    [带权有向图上的中国邮路问题] #include<cstring> #include<cstdio> #include<algorithm> #include< ...

  5. P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序。

    P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序. 头文件1:SeqList.h #include<stdio.h>#define M ...

  6. C++ 实现带权有向图的每对顶点之间的最短路径Floyd算法(完整代码)

    基本思想是: 假设求从顶点vi到vj的最短路径. 如果从vi到vj有弧,则从vi到vj存在一条长度为arcs[i][j]的路径,该路径不一定是最短路径,尚需进行n次试探. 首先考虑路径(vi, v0, ...

  7. 为什么Prim算法不适用于带权有向图

    其实,能不能使用Prim算法计算图的最小生成树,和这个图是有向图还是无向图,这两者之间没有必然的联系. 而是,如果在有向图中出现了以下情况,那么就不能使用Prim算法: 假设一个有向图有3个顶点 1- ...

  8. 【数据结构与算法】带权图最短路径Dijkstra算法

    伪代码 //u是源节点 Initialization: N' = {u} for all nodes v if v is a neighbor of u then D(v) = c(u,v) e1se ...

  9. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  10. java有向图最短路径_单源最短路径之Java实现(使用Java内置优先队列)

    import java.util.*; /** * 用堆实现了从一个点到其他点的最短路径 * @author 李赫元 */ public class ShortestPath { /**有n个节点*/ ...

最新文章

  1. C#——文件处理和字符串处理DEMO
  2. SAP ERP classification和C4C的同步
  3. 主动给团队或用户安装Teams App
  4. 2019计算机应用基础期末考试试题,2019-2020年度公共课计算机应用基础考试试题附答案...
  5. 创意购物海报|吸引你的不止买买买,更是创意!
  6. mysql按 当前时间和规定时间大小排序_为什么 MySQL 使用 B+ 树· Why#x27;s THE Design?(009)...
  7. 信号检测与判决的五大准则
  8. HPGL(PLT文件格式)文件解析及VS2017工程源码
  9. cad详图怎么画_CAD施工图怎样能画的快?老师傅教你20个制图诀窍,远超他人!
  10. 软件测试入门及实战篇
  11. 数字电路基础:系统设计优化
  12. 计算机相关设备巡检表,电脑维护巡检方案
  13. 关于信息墒与压缩编码基础的学习
  14. 计算机考研常考:广义表的定义以及数据结构,你都会了吗?
  15. 联想小新+Windows10+Ubuntu18.04双系统安装+引导设置过程全记录
  16. 大咖集结,共创生态|AIOps社区专家团正式集结出道
  17. padding的用途
  18. 威尔特拉斯定理_数学大师启示录维尔斯特拉斯.pdf
  19. 256qam是什么意思_一文读懂5G的信号调制方式!5G比4G的快的主要原因就是256QAM
  20. 重磅:世纪大和解!阿里、腾讯生态将打通

热门文章

  1. 【论文解读】[目标检测]retinanet
  2. PHP 后台程序配置config文件,及form表单上传文件
  3. Scalaz(49)- scalaz-stream: 深入了解-Sink/Channel
  4. hibernate Restrictions 用法
  5. 二级公共基础之——数据结构与算法
  6. [原创]怎样尽可能多地发现缺陷,避免遗漏缺陷?
  7. 用Java操作Office 2007
  8. 微信小程序——风水罗盘
  9. 后端类型/状态/标识校验限定法
  10. vmware16安装centos7超详细说明