• 用优先队列实现
  • 从起点出发,需要知道终点的坐标,根据起点和终点的距离进行预估
// 'S' - 起点,'T' - 终点,'.' - 可以走的点,'*' - 最优解走过点路径,'x' - 去重已经走过了
#include <iostream>
#include <queue> //优先队列
#include <cmath>
using namespace std;struct node {int x, y; //点的坐标int step; //到这个点走了多少步double dis; //预估到终点到距离bool operator< (const node &b) const { //默认大顶堆,需要改为小顶堆return this->step + this->dis > b.step + b.dis;}
};int n, m; //地图大小
int sx, sy; //起点坐标
int ex, ey; //终点坐标
int mark[101][101][2]; //标记数组
int cnt;
int dir[8][2] = {0, 1, 1, 0, 0, -1, -1, 0, 1, 1, 1, -1, -1, 1, -1, -1}; //方向数组
char mmap[105][105]; //存放地图信息double cal(int x, int y)
{int a = ex - x, b = ey - y;return sqrt(a * a + b * b);
}void func(int x, int y)
{if ('S' == mmap[x][y]) return ;mmap[x][y] = '*';func(mark[x][y][0], mark[x][y][1]);
}void print()
{for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {cout << mmap[i][j];if ('x' == mmap[i][j])mmap[i][j] = '&';}}
}int main()
{cin >> n >> m;for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j) {cin >> mmap[i][j];if ('S' == mmap[i][j]) //起点sx = i, sy = j;if ('T' == mmap[i][j]) //终点ex = i, ey = j;}priority_queue<node> que;que.push((node){sx, sy, 0, cal(sx, sy)});while (!que.empty()) {node tmp = que.top();que.pop();for (int i = 0; i < 8; ++i) {int x = tmp.x + dir[i][0], y = tmp.y + dir[i][1];if ('T' == mmap[x][y]) {func(tmp.x, tmp.y);print();cout << ++tmp.step << endl;return 0;}if ('.' == mmap[x][y]) {mark[x][y][0] = tmp.x, mark[x][y][1] = tmp.y;que.push((node){x, y, tmp.step + 1, cal(x, y)});mmap[x][y] = 'x';++cnt;}}}cout << "Cant not go to end" << endl;return 0;
}

C++实现【启发式搜索】算法相关推荐

  1. 简单的启发式搜索---算法爬山算法

    爬山算法 这个算法挺简单的. 从当前的节点开始,和周围的邻居节点的值进行比较. 如果当前节点是最大的,那么返回当前节点,作为最大值(既山峰最高点):反之就用最高的邻居节点来,替换当前节点,从而实现向山 ...

  2. 遗传算法与爬山算法简介_遗传算法简介

    遗传算法与爬山算法简介 Genetic Algorithms (GAs) are a part of Evolutionary Computing (EC), which is a rapidly g ...

  3. 启发式搜索: A*算法

    启发式搜索: A*算法 回顾: 优先队列BFS.最短路 A*算法 – 估价函数 为什么? A*算法 实战 回顾: 优先队列BFS.最短路 普通BFS:按层扩展 优先队列BFS:每次从队列中取出当前代价 ...

  4. 启发式搜索(Informed Search)-贪婪算法GBS+A*算法

    目录 写在前面 一.启发式搜索和启发式函数 二.贪婪算法(贪婪最佳优先搜索)greedy best-first search (GBS) 三.A*搜索(结合UCS和GBS) A*搜索算法结束的条件是什 ...

  5. 搜索技术【启发式搜索】 - 简介 A* 算法 IDA*算法

    搜索技术[启发式搜索] - 简介 & A* 算法 & IDA*算法 尽管广度优先搜索.深度优先搜索加上有效的剪枝方法,可以解决很多问题,但这两种搜索都是盲目的,它们不管目标在哪里,只管 ...

  6. Tabu搜索(TS—Tabu search)算法是近年来出现的用于求解组合优化问题的一种高效的启发式搜索技术。 本文采用固定并联电容器作为研究对象对系统进行无功补偿,并利用智能优化方法得到使配电网损耗

    禁忌搜索算法解决配电网无功优化问题对应的MATLAB源码,有对应的参考资料. 电力系统配电网的无功优化规划是保证配电网安全.经济运行的一项有效手段,是降低网损.提高电压质量的重要措施. 因此,电力系统 ...

  7. 热烈推荐: A*算法 (启发式搜索的入门篇,必看)转载

    热烈推荐: A*算法 (启发式搜索的入门篇,必看)转载 (2005-10-8 21:56)在搜索式算法中,A*算法算是个分水岭.因为它引入了启发式估价函数,从"瞎搜"转化到了&qu ...

  8. 基于python的九宫重排问题的启发式搜索(A*算法)求解程序

    基于python的九宫重排问题的启发式搜索(A*算法)求解程序 一.实验内容 在3х3组成的九宫棋盘上,放置数码为1~8的8个棋子,棋盘中留有一个空格,空格周围的棋子可以移动到空格中,从而改变棋盘的布 ...

  9. poj 2449 Remmarguts' Date 启发式搜索 A*算法

    做这个题算是学了学spfa算法,一开始感觉spfa和dij好像:dij找最小点松弛,spfa就是一个一个的松弛,松到不能松. 求S到T的第K短路 思路:这个算法的思路是从源点S优雅的暴力跑bfs,用优 ...

  10. 人工智能:模型与算法 之 启发式搜索

    搜索算法:贪婪最佳优先搜索(Greedy best-first search) 评价函数f(n) = 启发函数h(n) 贪婪最佳优先搜索算法不是最优的,也是不完备的.因此A*算法被提出,在A*算法中 ...

最新文章

  1. OSI参考模型与TCP/IP协议的比较研究
  2. 02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理
  3. 为什么修改了ie级别里的activex控件为启用后,还是无法下载,显示还是ie级别设置太高?
  4. 《你必须知道的.NET》英雄会上骄人亮相
  5. matlab计算梁截面特性,MATLAB环境下叶片截面几何特性计算程序的设计
  6. 二级分销商城简单的设计方式
  7. web前端期末大作业 HTML+CSS+JavaScript仿唯品会购物商城网页设计实例 企业网站制作
  8. 自动写故事、写字成图?5款有趣实用的AIGC工具分享
  9. django搭建个人博客(一)
  10. STM32F103ZET6开发板实现跑马灯实验
  11. 罗克韦尔自动化和PTC为由PTC支持的FactoryTalk InnovationSuite™添加行业首创的增强功能,用于简化和加速数字化转型
  12. 计算机毕业设计(10)python毕设作品之多B2C用户商城系统
  13. M.2、PCIe、mSATA接口的SSD 速度性能如何?哪一个是装机首选
  14. 3. IEC 61000-3 系列部分标准简介(0 公式 0 基础学习电磁兼容)
  15. spring boot接入微信小程序支付流程
  16. 本周最新文献速递20220515
  17. 通配符证书有什么好处?
  18. Georgia与Times字体的比较
  19. QNotified模块源码
  20. pytorch 自动微分基础原理

热门文章

  1. 海思demo删减_从零开始在海思Hi3559a运行demo
  2. 基于C++实现的一种通用Base编解码器(Hex(Base16)/Base32/Base64)
  3. 2021年了,对话系统凉透了吗?
  4. File Systems Unfit as Distributed Storage Backends 开发十年Ceph的经验:文件系统不适合作为分布式存储后端
  5. C语言中scanf函数的用法
  6. 计算机基础知识教案总结,计算机基础学习心得体会范文
  7. 在线旅游网站技术讲解
  8. 《Dreamweaver CS6 完全自学教程》笔记 第一章:网页制作基础知识
  9. 计算机放大电路的基础知识,集成运算放大器基础知识及示例电路
  10. STM32 复位电路设计