当前位置: 首页 > news >正文

官网和商城结合的网站营销型网站建设空间必须是

官网和商城结合的网站,营销型网站建设空间必须是,外包公司能去吗,个人导航网站怎么备案戴克斯特拉算法(英语:Dijkstras algorithm),又称迪杰斯特拉算法、Dijkstra算法,是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程: 1.首先设置开始节点的成本值为0,并将…

戴克斯特拉算法(英语:Dijkstra's algorithm),又称迪杰斯特拉算法、Dijkstra算法,是由荷兰计算机科学家艾兹赫尔·戴克斯特拉在1956年发现的算法。

算法过程:

1.首先设置开始节点的成本值为0,并将开始节点放入检测列表中。

2.将检测列表中的所有点按到目标点所需的成本值排序,选择成本最小的节点作为当前节点,并将其移出检测列表。

3.将当前点周围的点中不包含在检测列表中的点加入到检测列表,将周围点加入到已检测列表中。

4.更新检测列表中的节点到当前节点的成本值。

5.重复2,3,4直到找到目标点。

代码实现:

public class Dijkstra : FindPathAlgorithm
{public Dijkstra(int[,] mapData, int xCount, int zCount) : base(mapData, xCount, zCount){}public override List<Vector2Int> FindPath(Vector2Int startPos, Vector2Int goalPos){DataNode dataNode = this.DijkstraFind(startPos, goalPos);if (dataNode == null){Debug.LogError("寻路有误,请检查参数是否正确");return null;}return Utils.GetPath(dataNode);}DataNode DijkstraFind(Vector2Int startPos, Vector2Int goalPos){//存储要检测的点List<DataNode> frontier = new List<DataNode>();//存储已经检测的点List<Vector2Int> reached = new List<Vector2Int>();DataNode startNode = new DataNode(startPos, null);startNode.gCost = 0;frontier.Add(startNode);reached.Add(startPos);while (frontier.Count > 0){DataNode currentNode = GetLowestgCostNode(frontier);frontier.Remove(currentNode);if (currentNode.pos == goalPos){Debug.Log("完成!!!");return new DataNode(goalPos, currentNode.parent);}List<DataNode> neighbors = GetNeighbors(currentNode.pos, reached);foreach (DataNode neighbourNode in neighbors){if (!frontier.Contains(neighbourNode)){neighbourNode.parent = currentNode;frontier.Add(neighbourNode);}reached.Add(neighbourNode.pos);}this.UpdateCost(frontier, currentNode);}return null;}//更新成本值void UpdateCost(List<DataNode> nodes, DataNode currentNode){for (int i = 0; i < nodes.Count; i++){int newCost = currentNode.gCost + CalculateDistanceCost(nodes[i].pos, currentNode.pos);if (nodes[i].gCost > newCost){nodes[i].gCost = newCost;}}}List<DataNode> GetNeighbors(Vector2Int current, List<Vector2Int> reached){List<DataNode> neighbors = new List<DataNode>();for (int i = 0; i < Utils.pointDir.Count; i++){Vector2Int neighbor = current + Utils.pointDir[i];if (this.IsCanAdd(neighbor, reached)){neighbors.Add(new DataNode(neighbor, null));}}return neighbors;}bool IsCanAdd(Vector2Int current, List<Vector2Int> reached){if (reached.Contains(current))return false;if (current.x >= 0 && current.y >= 0 && current.x < MapData.m_MapData.GetLength(1) && current.y < MapData.m_MapData.GetLength(0)){//如果是障碍物,则不能被Addif (MapData.m_MapData[current.y, current.x] == 1){return false;}return true;}return false;}private int CalculateDistanceCost(Vector2Int a, Vector2Int b){return Mathf.Abs(a.x - b.x) + Mathf.Abs(a.y - b.y);}private DataNode GetLowestgCostNode(List<DataNode> pathNodeList){DataNode lowestFCostNode = pathNodeList[0];for (int i = 1; i < pathNodeList.Count; i++){if (pathNodeList[i].gCost < lowestFCostNode.gCost){lowestFCostNode = pathNodeList[i];}}return lowestFCostNode;}
}

结果:

参考链接:

Pathfinding in Unity - Part3: Dijkstra Algorithm Theory (youtube.com)

Pathfinding in Unity - Part4: Dijkstra Algorithm Implementation (youtube.com)

How Dijkstra's Algorithm Works (youtube.com)

戴克斯特拉算法 - 维基百科,自由的百科全书 (wikipedia.org)

http://www.yayakq.cn/news/675766/

相关文章:

  • 免费做金融网站wordpress dux1.9
  • 北京市建设监理协会网站怎么用 c文件做网站
  • 石家庄网站开发多少钱镇平做网站
  • 电子商务网站建设课程设计做网站傻瓜软件
  • 成都网站设计公网站建设网站建设 网站制作
  • 兰州光辉网站建设三维家设计官网
  • 连云港网站建设推广龙岗区建设工程交易服务网
  • 一个朋友找我做网站该收多少钱网站备案密码重置申请表
  • 郑州企业网站设计公司哪家好策划书中网站制作怎么写
  • 猎头自己在哪个网站做单云南城市建设职业学院成绩查询网站
  • 郑州中心站外贸的整个详细流程
  • 网站制作找哪家公司好wordpress修改教程视频
  • 深圳英文建站公司网站建设需要会
  • 自己做的网站提示危险做非法网站
  • 网站侧导航360建站平台
  • 网站开发需要提供哪些资料网站手机版跳转 seo
  • 用wordpress建企业网站网站开发用c语言吗
  • 手机wap网站制作权威迷失传奇新开网站
  • 做网站是自己公司做好还是外包好对软件开发的理解和认识
  • 杭州网站优化流程流感用什么药最好
  • 福建富通建设有限公司网站比较好的wordpress主题
  • 网站开发经验与教训范文网站设置搜索关键字
  • 网站开发z亿玛酷1负责凡客软件下载
  • 网站开发需要的技术人员有什么软件西安网站建设咪豆互联
  • 郑州网站建设喝彩科技南通网站备案
  • 广州做响应式网站中山专业网站建设公司
  • 网站下做二级域名如何修改网站抓取内容
  • 东莞网站制作搜索祥奔科技东莞市研发网站建设公司
  • 西安做网站公司哪家好wordpress如何做站群
  • 深圳福永做网站江都建设局网站