《启发式搜索算法解决八数码问题(C语言)》由会员分享,可在线阅读,更多相关《启发式搜索算法解决八数码问题(C语言)(9页珍藏版)》请在人人文库网上搜索。

1、1、程序源代码 include #include struct node int a33;用二维数组存放8数码 int hx;/函数h (x)的值,表示与目标状态的差距 struct node *parent;/指向父结点的指针 struct node *next;/指向链表中F个结点的指针 ; /hx 函数/ int hx(int s33) /函数说明:计算S与目标状态的差距值 int i, j; int hx=0; int sg3 3 = 1,2 3,8,0,4, 7, 6, 5; for(i=0;i3;i+) for(j=0;jnext=NULL; /初始化 for(i=0;i3;i+)。

2、/找到二维数组中0的位宜 for(j=0;jalij=0) flag=l; break; if(flag=l) break; for (m=0: ma 赋给 x for (n=0;namLn; 根据0的位宜的不同,对X进行相应的变换 情况1 if(i-l=0) t=xij ;xi j二xi-1 j ;Xi-lj=t; flag=0; for (m=0; m3: m+) /将 x 赋给 a for(n=0;nparent-amLn) flag 卄; if(flag!=9) q=(node *)malloc(sizeof(node); for (m=0;m3;m-r+) /将 x 赋给 a for。

3、(n=0;namn二xm n; q-parent=ex; q-hx二hx(q-a); q-next=NULL; p-next=q; p=p-next; 情况2 for (m=0;ma 重新赋给 x,即还原 x for (n=0;namn; if(i+l=2) t二xi j ;xi j二xi+l j ;xi+l j二t; flagO; for(m=0;m3;m+) for (n=0;nparentamLn) flag 卄; if (flag!=9) q=(node *)malloc(sizeof(node); for (m=0;m3;m+) /将 x 賦给 a for (n=0;nam n=xm。

4、 n; q-parent=ex; q-hx二hx(q-a); q-next=NULL; p-next=q; p=p-next; 情况3 for (m=0;ma 重新赋给 x,即还原 x for (n=0;namn; if(j-l=0) t=xi j ;xi j二xi j-l ;Xi j-l=t; flag=0; for(m=0;m3;m+) for (n=0;nparentamn) flag 卄; if(flag!=9) q二(node *)malloc(sizeof(node); for (m=0;m3;m+)/将 x 赋给 a for(n=0;namn=xmn; q-parent=ex; 。

5、q-hx二hx(q-a); q-next=NULL; p-next=q; p=p-next; 情况4 for (m=0;ma 重新赋给 x,即还原 x for (n=0;namn; if(j+l=2) t=xi j ;xi j二xi j+1 ;xij+l=t; flag=0; for(m=0;m3;m+) for (n=0;nparent-amn) flag 卄; if (flag!=9) q=(node *)malloc(sizeof(node); for (m=0;m3;m-r+) for (n=0;namn二xmn; q-parent=ex; q-hx二hx(q-a); q-next=N。

6、ULL; p-next=q; p=p-next; head=head-next; return head; /extend 函数 end /insert 函数/ node* insert(node *open, node * head) /函数说明:将head链表的结点依次插入到。pm链表相应的位置, /使open表中的结点按从小到大排序。函数返回open指针 node *q;/p、q均指向open表中的结点,p指向q所指的前一个结点 int i, j; int flag=0; 辻(open二二NULL)/初始状态,open表为空 /首先将head表第一个结点直接放入open表中 open=h。

7、ead; q=head; head二head-next; q-next=NULL; 再插入第二个结点 if (head-hxhx) /插入到首结点位置 open=head; head=head-next; open-next=q; else 或者第二个结点的位置 q-next=head; head=head-next; q=q-next; q-next=NULL; p=open; p二open; q=open-next; /end if wh 订e(head!=NULL) q=open; if (head-hxhx) /插入到表头 open=head; head=head-next; open。

8、-next=q; continue; else q=q-next;p=open; /否则,q指像第二个结点,p指向q前一个结点 while (q-next! =NULL) /将head的一个结点插入到链表中(非表尾的位置) printfC请输入初始状态的8数码(按每行从左往右依次输入,用0表示空格):); for(i=0;i3;i +) for(j=0;jhx二9; =hx; open二 p= if (open-hx=0) printf (该状态已为最终状态! n); return; q= close二 open二NULL; newlist=extend(q) ;/newlist指向新扩展出来。

9、的链表 open=insert (open, newlist);/将扩展岀来的结点插入到open表中 wh 订 e(l) q-next=open;/q始终指向close表尾结点。将open表的第一个元素加到close 表 open=open-next; q=q-next; q-next=NULL; if (q-hx=0) printf (n 搜索成功! n); break; newlist=extend(q) ;/对close表最后一个结点进行扩展,扩展得到的链表接到 open表尾 open=insert (open, newlist) ;/将扩展的结点按顺序插入到open表中 p=close; printfC择优搜索过程如下:n); while(p!=NULL) for(i=0;i3;i+) for(j=0;jai j); printf(n); printf(*n*); p=p-next; 2程序运行结果截图 4 7 截图1: r 初始态 2 1 7 为 3 4 5 运行结果 右图所示 1 0 请输入初始状态的 8 3 6 4 0 5 0 2 3 18 4 ? 6 5 Press any kwy to continue。

八数码问题c语言,启发式搜索算法解决八数码问题(C语言)相关推荐

  1. 宽度优先搜索算法解决八数码问题

    宽度优先搜索算法解决八数码问题 原理 1.宽度优先搜索是指在一个搜索树中,搜索以同层邻近节点依次扩展节点.这种搜索是逐层进行的,在对下一层的任一节点进行搜索之前,必须搜索完本层的所有节点. 宽度优先搜 ...

  2. python---A*搜索算法解决八数码问题

    A*解决八数码问题 问题内容 算法流程 相关设置 具体程序 运行结果 遇到的问题 完结 问题内容 [八数码问题] 在一个3×3的九宫中有1-8这8个数字以及一个空格随机摆放在其中的格子里.将该九宫格调 ...

  3. 有界深度优先搜索算法解决八数码问题

    <人工智能导论>(第四版) 课后题5.3 C++实现 题目: 运行结果: C++代码: 思想:Octal结构体表示一个状态,其中parent和current为父状态和当前状态的值,这个值可 ...

  4. 启发式搜索算法解决数独问题sudoku,附python实现

    定义 数独是源自18世纪瑞士的一种数学游戏.是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫(3*3)内的数字均含1 ...

  5. Python利用A*算法解决八数码问题

    资源下载地址:https://download.csdn.net/download/sheziqiong/86790565 资源下载地址:https://download.csdn.net/downl ...

  6. A*算法解决八数码问题 Java语言实现

    A*算法解决八数码问题 Java语言实现 参考文章: (1)A*算法解决八数码问题 Java语言实现 (2)https://www.cnblogs.com/beilin/p/5981483.html ...

  7. python解决八数码问题_A搜索算法(python)之八数码问题

    什么是启发式搜索算法 启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围.降低问题复杂度的 ...

  8. 题目2:隐式图的搜索问题(A*算法解决八数码)

    数据结构课程实践系列 题目1:学生成绩档案管理系统(实验准备) 题目2:隐式图的搜索问题(A*算法解决八数码) 题目3:文本文件单词的检索与计数(实验准备) 文章目录 数据结构课程实践系列 题目1:学 ...

  9. 经典算法研究系列:八、再谈启发式搜索算法

     经典算法研究系列:八.再谈启发式搜索算法 作者:July   二零一一年二月十日 本文参考: I.  维基百科. II. 人工智能-09 启发式搜索. III.本BLOG内,经典算法研究系列:一.A ...

  10. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

最新文章

  1. JVM---执行引擎
  2. linux snap 进程cpu占用100% 解决
  3. winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①
  4. Dataset之MapillaryVistas:MapillaryVistas数据集的简介、下载、使用方法之详细攻略
  5. Spring AOP详解(http://sishuok.com/forum/posts/list/281.html)
  6. go.js中的图标(icons)的使用
  7. php 获得汉字拼音首字母的函数,php 获得汉字拼音首字母的函数
  8. Linux 中安装 Mysql
  9. 1,SFDC 开发篇 - 类对象和SOQL查询
  10. python动态导入类或函数_Python 动态从文件中导入类或函数的方法
  11. 商务网站建设与维护【5】
  12. Git报错:Git failed with a fatal error. Git failed with a fatal error. Need to specify how to reconcile
  13. 动手学习数据分析——第一部分
  14. 万亿候苹果,1000000000000 美元的海盗公司 | 摸鱼系列
  15. English - Grammar(未完)
  16. asp.net930-绿能店电动车租赁系统
  17. 计算机科学技术学院迎新晚会主题,计算机科学与技术学院举办2018级迎新晚会...
  18. linux sctp 模块,Linux Kernel SCTP模块多个安全漏洞
  19. [操作系统笔记]处理机调度
  20. java qq ui界面_java swing 创建一个简单的QQ界面教程

热门文章

  1. Typora、Markdown 字体样式
  2. Vue中阿里图标的使用
  3. java dwg转pdf_java实现CAD图纸文件DWG格式转为PDF格式
  4. oracle分页优化
  5. VUE实现市、区二级联动
  6. Qt OpenGL加载OBJ模型
  7. Oracle数据访问组件ODAC(Oracle Data Access Components)安装和使用
  8. Linux 中最好的 CHM 文件阅读器
  9. flutter:实现扫码枪获取数据
  10. font awesome图标大小调整