最短路径Dijkstra算法
Dijkstra算法简介 Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离,这样把所有的点找遍之后就存下了起点到其他所有点的最短距离。 算法核心 选择一个节点标记成已经遍历 选择从起点到其他节点路径最短的节点,如图所示起始点0到1、2、3的距离分别为5、2、6,当前不可达的4记作无穷大,则下一个被选择的节点就是2 在遍历过程中更新起始点到其他节点的最短距离 从起始点0到1的距离为5,按照步骤一选取下个节点2后,0->2->1距离比0->1距离要短(这里已经间接说明为什么第一步要选择2的原因了),需要将距离由..
更多人机对弈
背景 小时候在FC上玩过象棋游戏,印象最深的就是那个老头,每次走棋贼慢同时棋力也特高。一直想了解下人机对弈的算法,看了几篇文章后,发现基本的套路都是一样的,自己写了一个小时候玩的两口吃一口的小游戏。 棋类AI基本步骤(以下都是基于两口吃一口这个小游戏) 局面生成:棋子种类、开局位置 // 5x5 棋盘,黑方和白方初始时都有5颗棋子 /* 0 1 2 3 4 ┌─────────┐ 0│○─○─○─○─○│ 1│├─┼─┼─┼─┤│ 2│├─┼─┼─┼─┤│ 3│├─┼─┼─┼─┤│ 4│●─●─●─●─●│ └─────────┘ */ std::string GenBoard(int row, int col, int colNum, int rowNum, std::map<..
更多