人工智能-八数码问题-启发式搜索
#include<bits/stdc++.h>
using namespace std;
vector<int>start_state,end_state; //初态和终态
struct state{vector<int>now; //当前的状态数组vector<int>steps; //当前走过的步骤记录int deep; //深度//启发信息=状态的深度+未在正确位置的数字个数bool operator < (const state &a) const{int x=0,y=0;for(int i=0;i<9;i++)if(now[i]!=end_state[i])x++;for(int i=0;i<9;i++)if(a.now[i]!=end_state[i])y++;return deep+x<a.deep+y;}
};
int step[4]={-3,-1,1,3}; //移动路线共四种
map<vector<int>,int>vis; //标记状态是否遍历过
int find_(vector<int>a){ //找到当前矩阵中0的位置for(int i=0;i<9;i++)if(a[i]==0)return i;
}
void print_matrix(vector<int>a){ //打印矩阵printf("%d %d %d\n%d %d %d\n%d %d %d\n\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
}
void print(state t){ //打印结果vector<int>k=start_state;printf("initial\n");print_matrix(k);for(int i=0;i<t.steps.size();i++){int index=find_(k);swap(k[index+t.steps[i]],k[index]);printf("step %d\n",i+1);print_matrix(k);}
}
bool check(int index,int k){ //判断该步是否可以移动if(k==-3&&(index==3||index==4||index==5||index==6||index==7||index==8))return 1;if(k==-1&&(index==1||index==2||index==4||index==5||index==7||index==8))return 1;if(k==1&&(index==0||index==1||index==3||index==4||index==6||index==7))return 1;if(k==3&&(index==0||index==1||index==2||index==3||index==4||index==5))return 1;return 0;
}
int main()
{for(int i=0;i<9;i++) { //读入初态int x;cin>>x;start_state.push_back(x);}for(int i=0;i<9;i++) { //读入终态int x;cin>>x;end_state.push_back(x);}bool flag=0; //标记是否到达终态/* 构造初始状态,加入到空队列中 */vector<int>k;state t;t.now=start_state;t.steps=k;t.deep=0;priority_queue<state>q;q.push(t);vis[start_state]=1;while(!q.empty()){t=q.top();if(t.now==end_state){ //判断当前队首元素是否为终态flag=1;print(t);break;}if(t.deep>10) break; //深度>10,结束搜索else{int index=find_(t.now);for(int i=0;i<4;i++){if(check(index,step[i])){state s;s.now=t.now;s.steps=t.steps;s.deep=t.deep+1;swap(s.now[index],s.now[index+step[i]]);s.steps.push_back(step[i]);if(!vis.count(s.now)){q.push(s);vis[s.now]=1;}}}}q.pop();}if(!flag)printf("no answer\n");return 0;
}
人工智能-八数码问题-启发式搜索相关推荐
- 人工智能----八数码问题(启发式搜索)
启发式搜索 一. 实验目的 理解人工智能系统中搜索策略的含义. 熟悉盲目搜索和启发式搜索算法的实际应用. 结合八数码问题的建模.求解及编程语言的应用,掌握启发式搜索算法的应用. 二. 实验原理 启发式 ...
- 八数码问题a*算法c语言,八数码问题的A*算法求解
A*算法是启发式搜素算法中较为出名和高效的算法之一,其关键是对于启发式函数的实际,启发式函数h(x)需要尽可能的接近实际的 .下面是人工智能八数码问题使用A*算法求解的源码放在博客上记录一下.程序使用 ...
- 人工智能作业 八数码启发式搜索与bfs比较
问题描述 3×3九宫棋盘,放置数码为1 -8的8个棋牌,剩下一个空格,只能通过棋牌向空格的移动来改变棋盘的布局. 要求:根据给定初始布局(即初始状态)和目标布局(即目标状态),如何移动棋牌才能从初始布 ...
- A*算法解决八数码问题 人工智能原理实验报告 启发式搜索 python
目录 一.实验主要步骤 ①.设计界面输入规则 ②.判断是否有解 ③.求解 二.实验结果展示 三.附录 完整实验程序代码: 一.实验主要步骤 ①.设计界面输入规则 有且仅有9位数字代表数码和空格,从左到 ...
- 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)
前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...
- 《人工智能》实验二——搜索技术(八数码问题)
必须记住下一步还可以走哪些点--OPEN表(记录还没有扩展的点) 必须记住哪些点走过了--CLOSED表(记录已经扩展的点 广度优先搜索 在应用BFS算法进行八数码问题搜索时需要open和closed ...
- 人工智能作业 - A*算法程序求解八数码
文章目录 A*算法 简介 思路 A*伪代码 八数码问题 题目描述 注意事项 实验过程 解决思路 伪代码 二维压缩为一维 检查是否有解 其他 代码实现 h1和h2的对比 关于曼哈顿距离 参考链接 A*算 ...
- 人工智能导论(2)——启发式算法(八数码问题)
实验要求 用A*算法来解决八数码问题. 代码实现 #include<iostream> #include<stdio.h> #include<cmath> usin ...
- 【人工智能】八数码问题:广度搜索、深度搜索
应用广度搜索BFS和深度搜索DFS解决八数码问题,广度搜索和深度搜索都是盲目搜索,相关理论知识,算法过程:问题求解:状态空间图和盲目搜索. 参考:7种方法求解八数码问题 Python实现A*算法解决N ...
- 人工智能:(C语言)采用状态空间法求解八数码问题
实验要求:八数码难题也称九宫问题,它是在3×3的方格棋盘上,分别放置了表有数字1.2.3.4.5.6.7.8的八张牌,初始状态S0,目标状态Sg,要求程序能输入任意的初始状态和目标状态,要求通过空格来 ...
最新文章
- Python之Numpy数组拼接,组合,连接
- 让模糊图片变视频,找回丢失的时间维度,MIT这项新研究简直像魔术
- 一个人越来越有出息的7大迹象
- linux 修改dmi信息,如何从linux清除DMI系统事件日志?
- 《笨办法学python》6_笨办法学Python 习题 25: 更多更多的练习
- 使用Navicat Premium 12 连接远程Oracle数据库
- (王道408考研操作系统)第二章进程管理-第二节2:调度算法评价指标
- JavaSelenium处理页面Table以及Table中随机位置的数据
- Swift 3: let sortedNumbers = numbers.sort { $0 $1 } print(sortedNumbers) 结果显示为()
- 工作4-5年的.NET开发人员也需要有人带带才可以保证软件项目的质量
- CIF、DCIF、D1分辨率是多少?
- numpy中相关系数
- 不支持android浏览器下载工具,android 默认浏览器 无法下载,此手机不支持此内容(自定义文件or APK文件看过了)...
- 天翎BPM流程引擎助力打造流程服务中台
- 微软苏州校招笔试 12月27日
- JavaScript框架的四个时代
- 【紫光同创国产FPGA教程】【第九章】HDMI编程测试实验
- 苹果:付费才能用 iOS 开发者预览版,网友吐槽:找 Bug,还得先交 99 美元?
- 操作系统:Linux进程与线程
- 在MATLAB的figure图中画局部放大的图中图
热门文章
- wincc vbs mysql_WinCC 如何访问数据库(VBS)
- DHCP报文分析及C/C++代码实现
- 机器学习文本特征提取
- matlab怎么画两个自变量的图_横道图怎么画?免费使用的项目管理软件
- 大数据驱动教育变革,产教融合呈现新高度——数据科学与大数据技术教育分论坛顺利召开...
- 计算机应用程序设计师,2018年上半年软件设计师真题+答案解析上午选择+下午案例完整版(全国计算机软考).pdf...
- Adobe dreamweaver CS6小白入门教程
- python语音信号处理(一)
- 【PCL】SolidWorks 三维建模 STL, OBJ 采样生成 PCD 点云数据(附源码)
- 计算机辅助制造camppt,CADCAM课件计算机辅助制造 (2).ppt