ImageVerifierCode 换一换
格式:DOC , 页数:100 ,大小:1.08MB ,
资源ID:4375070      下载积分:18 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4375070.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(人工智能实验报告大全.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

人工智能实验报告大全.doc

1、 人工智能课内实验报告 (8次) 学  院:  自动化学院       班    级:  智能1501       姓 名:  刘少鹏(34)   学  号:            目 录 课内实验1:猴子摘香蕉问题得VC编程实现……………………1 课内实验2:编程实现简单动物识别系统得知识表示………5 课内实验3:盲目搜索求解8数码问题………………………18 课内实验4:回溯算法求解四皇后问题………………………33 课内实验5:编程实现一字棋游戏……………………………37 课内实

2、验6:字句集消解实验…………………………………46 课内实验7:简单动物识别系统得产生式推理………………66 课内实验8:编程实现D-S证据推理算法……………………78 人工智能课内实验报告 实验1:猴子摘香蕉问题得VC编程实现 学 院:   自动化学院   班  级: 智能1501      姓 名: 刘少鹏 (33)   学 号:   06153034     日   期: 2017—3—8 10:15-12:00 实验1:猴子摘香蕉问题得VC编程实现 一、 实验目得 (1)熟悉谓词逻辑表示法;

3、 (2)掌握人工智能谓词逻辑中得经典例子—-猴子摘香蕉问题得编程实现. 二、编程环境 VC语言 三、 问题描述 房子里有一只猴子(即机器人),位于a处。在c处上方得天花板上有一串香蕉,猴子想吃,但摘不到。房间得b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题得求解过程。 图1  猴子摘香蕉问题 四、 源代码 #include〈stdio、h〉 unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned ch

4、ar y) { ﻩ     printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子得位置,y为箱子得位置 } void Monkey_Move_Box(char x, char y) {    printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子得位置,y为香蕉得位置 } void Monkey_On_Box() {     printf(”Step %d:monkey爬上箱子\n", ++i); } void Monkey_Get_Bana

5、na() {   printf(”Step %d:monkey摘到香蕉\n", ++i); } void main() { ﻩ    unsigned char  Monkey, Box, Banana; ﻩ printf(”********智能1501班**********\n");   printf(”********06153034************\n”); ﻩ    printf(”********刘少鹏**************\n"); ﻩ printf("请用a b c来表示猴子箱子香蕉得位置\n");

6、 ﻩ    printf(”Monkey\tbox\tbanana\n”); scanf(”%c”, &Monkey); ﻩ    getchar(); ﻩ  printf(”\t”); scanf(”%c", &Box); getchar(); ﻩ    printf("\t\t"); ﻩ scanf("%c”, &Banana);    getchar();   printf("\n操作步骤如下\n”); ﻩ   if (Monkey != Box) { ﻩ   Mo

7、nkey_Go_Box(Monkey, Box);   }     if (Box != Banana) ﻩ { ﻩ Monkey_Move_Box(Box, Banana); ﻩ   }       Monkey_On_Box(); ﻩ     Monkey_Get_Banana();     printf(”\n"); ﻩ   getchar(); } 五、 实验结果相关截图 六、心得体会      通过本次实验,我初步了学会了使用VC得新建工程,并且进行简单得程序编写。此外我还学会如何使用

8、一些谓词来解决生活中得一些简单问题,并且用VC编程给出具体得操作步骤,感觉对VC编程有了新得认识。在实验中我也遇到过许多问题,比如在我写完代码进行编译时总就是会出现一个错误“ fatal error C1010: 在查找预编译头时遇到意外得文件结尾,就是否忘记了向源中添加“#include ‘stdafx、h’”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目得每一个cpp结尾得文件属性中设置不使用预编译头即可。在这个过程中也锻炼了自己解决问题得能力。 人工智能课内实验报告 实验2:编程实现简单动物识别系统得知识表示 学 院: 自

9、动化学院       班 级: 智能1501      姓   名: 刘少鹏(33)    学    号:  06153034        日   期: 2017-3—13 10:15—12:00    实验2:编程实现简单动物识别系统得知识表示 一、实验目得 1、理解与掌握产生式知识表示方法; 2、能够通过VC编程语言实现产生式系统得规则库。 二、实验内容 1、以动物识别系统得产生式规则为例; 2、用选定得编程语言建造规则库与综合数据库,并能对它们进行增加、删除与修改操作. 三、 实验步骤

10、 1、 确定需要识别得动物及其属性 本次实验得简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟与信天翁。 2、 建立识别七种动物识别系统得规则 3、 选定编程语言并确定综合数据库与规则库结构 (1) 选用C语言作为编程语言   (2)综合数据库得建立 (3)规则库得建立 四、程序源代码 #include 〈iostream〉 #include using namespace std; struct RULESﻩﻩ ﻩ {    int count; ﻩ char pre[255]; ﻩ   

11、 char back[255];  int mark; }; void check(); RULES r[100] = { ﻩ   { 1,”有毛发","哺乳动物",0 }, ﻩ //所有规则静态数据库 ﻩ     { 1,”有奶",”哺乳动物",0 }, ﻩ     { 1,"有羽毛”,”鸟",0 }, ﻩ      { 2,”会飞&下蛋&","鸟",0 },       { 1,”吃肉","食肉动物”,0 }, ﻩ       { 3,”有锋利得牙齿&有爪&眼睛盯着前方&”,"食肉动物”,

12、0 }, ﻩ       { 2,"哺乳动物&有蹄&”,”有蹄类哺乳动物”,0 }, ﻩ     { 2,”哺乳动物&反刍&”,”有偶蹄类哺乳动物”,0 }, ﻩ     { 4,”哺乳动物&食肉动物&黄褐色&有暗斑&",”金钱豹",0 },     { 4,"哺乳动物&食肉动物&黄褐色&黑色条纹&”,"老虎”,0 },     { 4,"有蹄类哺乳动物&有长脖子&有长腿&有暗斑&","长颈鹿",0 }, ﻩ    { 2,”有蹄类哺乳动物&黑条纹&","斑马",0 }, { 5,"鸟&不会飞&有长脖子

13、&有长腿&黑白色&","鸵鸟",0 }, ﻩ     { 4,"鸟&不会飞&会游泳&黑白色&",”企鹅”,0 },    { 2,"鸟&会飞&","信天翁”,0 }, ﻩ     { 1,”反刍","哺乳动物",0 } }; int number; int m; int cat = 15; int a; int length;ﻩﻩ ﻩ //输入得事实长度 string f[255]; ﻩﻩﻩ//输入得事实数组 void input() {   while (1)      { ﻩ cat++;

14、cout 〈〈 ”number" <〈 endl; ﻩ cin 〉> r[cat]、count;  cout 〈< "输入事实,两种以上得事实请在每个事实后加上‘&’符号" 〈< endl;  cin 〉> r[cat]、pre; ﻩ   cout 〈< ”输入结果” 〈〈 endl; cin >〉 r[cat]、back; ﻩﻩ r[cat]、mark = 0; ﻩﻩ  while (1) ﻩ  { ﻩﻩ cout << ”输入“1"继续添加规则,输入“2”查瞧规则库" 〈< endl; ﻩﻩﻩint p; ﻩcin 〉> p; ﻩﻩ

15、if (p == 1) ﻩﻩ { ﻩ ﻩ input(); ﻩﻩﻩ} ﻩ else ﻩﻩﻩ{ ﻩ if (p == 2) ﻩﻩ { ﻩﻩ ﻩ check(); ﻩ } ﻩ ﻩﻩelse ﻩ ﻩ { ﻩ ﻩcout <〈 "输入错误,重新输入" 〈〈 endl; ﻩﻩﻩﻩ} ﻩﻩﻩ } ﻩ     }   } }      void delate() { cout 〈< "输入要删除得条数" 〈< endl; ﻩ   int bar; ﻩ  cin >> bar;    f

16、or (int t = 0; t 〈= cat; t++) ﻩ   { ﻩ r[bar — 1] = r[bar]; bar++; } ﻩ  cat——; ﻩ   check(); } void check() { cout 〈< endl <〈 ”规则库如下” 〈< endl; for (int i = 0; i 〈= cat; i++) ﻩ { cout << i + 1 << ”、” << "由" 〈〈 r[i]、pre 〈< ”可得" 〈< r[i]、back <〈 endl; } ﻩ  cout << endl;

17、 ﻩ  while (1)   { cout <〈 ”输入“1”继续添加规则,输入“3”删除选定得规则" <〈 endl; ﻩ cin >> m; ﻩﻩ if (m == 1) ﻩ { ﻩ input(); } ﻩﻩ else ﻩ  { ﻩ if (m == 3) ﻩ ﻩdelate(); } ﻩ  } } int find_rule(int s) ﻩ//查找规则库中就是否还有可使用得规则 { ﻩfor (int i = 0; i <= 15; i++) ﻩﻩs = s*r[i]、mark; //cout<〈”fi

18、nd_rule结果”<<s<

19、ak; ﻩ} else ﻩ ﻩi++; } ﻩreturn r、mark; } int pare2(RULES r) ﻩ//前提条件不为1 { string b[10]; string str, str2; ﻩint i, j = 1, num = 0; ﻩint a = 0; str = r、pre; ﻩfor (i = 0; i != 10; ++i)  //转换数组 ﻩ{ b[i] = ”"; } ﻩfor (i = 0; i != str、length(); ++i) ﻩ{ ﻩﻩif (str、at(i)

20、= '&') { ﻩﻩﻩb[j] += str、at(i); ﻩ} ﻩﻩelse ﻩ { j++; ﻩ } ﻩ} ﻩi = 1; ﻩwhile (i <= r、count) { ﻩfor (j = 1; j != length + 1; j++) ﻩ{ ﻩﻩ if (f[j] == b[i]) ﻩﻩﻩ{ ﻩ a += 1; ﻩﻩﻩ} ﻩ } ﻩi++; ﻩ} ﻩif (a == r、count) { str2 = r、back; ﻩﻩf[length + 1] = str2; ﻩ //加入事实库 ﻩ length

21、ﻩ ﻩﻩ //事实库得长度加1 ﻩr、mark = 1; //标记规则已使用过 } ﻩreturn r、mark; } void result() { ﻩint i = 1, m = 0; while (i != length + 1) { ﻩﻩif (f[i] == ”金钱豹") ﻩ{ ﻩ cout <〈 ”该动物就是金钱豹" <〈 endl; ﻩ ﻩm = 1; ﻩ ﻩbreak; ﻩ } ﻩ else ﻩﻩif (f[i] == "老虎”) ﻩﻩ{ ﻩ ﻩ cout 〈< "该动物就是老虎" 〈〈 endl; ﻩﻩ

22、m = 1; ﻩ ﻩﻩbreak; ﻩ ﻩ} ﻩ else ﻩﻩﻩﻩif (f[i] == ”长颈鹿") ﻩ { ﻩ cout 〈< "该动物就是长颈鹿" <〈 endl; ﻩﻩm = 1; ﻩ ﻩbreak; ﻩ } ﻩﻩﻩelse ﻩ ﻩ if (f[i] == "斑马”) ﻩﻩ { ﻩ ﻩcout << "该动物就是斑马" << endl; ﻩﻩ ﻩ ﻩm = 1; ﻩ break; ﻩ ﻩ ﻩ} ﻩﻩﻩﻩelse ﻩ ﻩ if (f[i] == "鸵鸟") ﻩﻩ ﻩﻩ { ﻩ ﻩ ﻩcou

23、t 〈〈 "该动物就是鸵鸟" 〈〈 endl; ﻩﻩﻩﻩ ﻩm = 1; ﻩﻩ ﻩbreak; ﻩﻩﻩﻩ } ﻩﻩﻩ ﻩelse ﻩﻩﻩ ﻩﻩﻩif (f[i] == ”企鹅") ﻩ ﻩ ﻩﻩﻩ{ ﻩ ﻩ ﻩcout 〈〈 ”该动物就是企鹅" <〈 endl; ﻩﻩﻩ m = 1; ﻩﻩ ﻩ break; ﻩ ﻩ ﻩﻩ} ﻩﻩ ﻩﻩelse ﻩﻩ ﻩﻩﻩ ﻩif (f[i] == "信天翁") ﻩ ﻩﻩ ﻩﻩ { ﻩ ﻩ ﻩ cout << "信天翁" 〈〈 endl; ﻩﻩ ﻩﻩ ﻩm = 1; ﻩﻩ ﻩﻩﻩ ﻩ

24、 break; ﻩ ﻩ } ﻩﻩﻩﻩﻩ else ﻩ ﻩ ﻩ i++; } ﻩif (m == 0) ﻩ cout << ”没有符合得动物,请确认特征,重新输入” << endl; } void idetify() { ﻩint i = 0, u = 0; ﻩif (find_rule(u) == 0)      //如果规则库中还有未使用得规则 ﻩ{//cout〈〈"还有未使用得规则"<<endl; ﻩﻩint num = length; ﻩﻩwhile (i〈16)ﻩﻩﻩﻩﻩ//从第一条规则开始遍历 { ﻩﻩﻩif (r[i

25、]、mark == 0)ﻩ ﻩ//如果该条规则未使用 ﻩ { if (r[i]、count == 1) ﻩ //该条规则前提数为1 ﻩﻩﻩ { ﻩﻩ u = pare1(r[i]); ﻩ if (u == 1) ﻩﻩﻩﻩﻩr[i]、mark = 1; ﻩ ﻩ if (r[i]、mark == 1) ﻩﻩﻩ{ ﻩ cout << ”使用规则" <〈 i + 1; ﻩ ﻩcout 〈〈 ”且加入得新事实为” 〈〈 r[i]、back <〈 endl; ﻩﻩﻩ } ﻩ ﻩ } ﻩ ﻩelse ﻩ ﻩ{ ﻩﻩﻩ ﻩu =

26、 pare2(r[i]); ﻩ ﻩﻩif (u == 1) ﻩ ﻩﻩ r[i]、mark = 1; if (r[i]、mark == 1) ﻩﻩ ﻩ { ﻩﻩﻩ cout << ”使用规则” << i + 1; ﻩﻩ ﻩ cout 〈< "且加入得新事实为" <〈 r[i]、back 〈< endl; ﻩﻩ } ﻩ ﻩ } ﻩ } ﻩ if (i == 15) ﻩ ﻩ{ ﻩﻩ if (num != length) ﻩ{ ﻩ ﻩﻩﻩi = 0; ﻩﻩﻩﻩﻩnum = length; ﻩ} ﻩ else ﻩﻩﻩ i

27、 = 16; ﻩ } ﻩﻩ else ﻩﻩ { ﻩ i++; ﻩ } } } ﻩelse ﻩ{ cout 〈〈 ”所有得规则都已使用” 〈〈 endl; ﻩ} ﻩresult(); } /*主函数*/ void main() { ﻩcout <〈 "******智能1501班********” 〈〈 endl; ﻩcout <〈 "******06153034**********” <〈 endl; cout <〈 ”******刘少鹏************” << endl; cout 〈< ”进行动物识别请输入7” 〈< en

28、dl; cout 〈〈 ”进行规则库操作请输入8" << endl; ﻩcin >〉 a; ﻩwhile (a == 8) {   while (1) ﻩ { ﻩﻩcout 〈〈 ”添加规则输入‘1’,查瞧已有规则输入‘2'” 〈〈 endl; ﻩ cin >> m; ﻩ if (m == 1) ﻩ{ ﻩ input(); } ﻩﻩelse ﻩ { ﻩﻩﻩif (m == 2) ﻩ { ﻩ check(); ﻩ ﻩ} ﻩ ﻩ else ﻩ ﻩcout 〈< ”输入错误请重新输入” 〈< endl; ﻩ

29、} } }   if (a == 7) ﻩ{ int u = 0; ﻩcout 〈< "请输入动物得特征数" <〈 endl; ﻩ cin 〉〉 length; ﻩ cout << "请输入动物得特征” 〈< endl; ﻩfor (int i = 1; i 〈= length; i++) ﻩ ﻩcin 〉〉 f[i]; ﻩ idetify(); } ﻩsystem(”pause”); } 五、 实验结果相关截图 1、程序总体结构     2、 规则库操作→查瞧规则库 3、 规则库操作→添加规则→添加袋鼠规则 4、

30、规则库操作→删除规则→删除袋鼠规则 5、动物识别→识别长颈鹿 六、心得体会   通过本次实验我深刻得理解与掌握产生式知识表示方法,并且能够通过VC编程语言实现产生式系统得规则库.本次实验我同样遇到许多问题,我通过自己查阅资料,与同学们讨论,逐步得将自己得问题解决,在这个过程中提高了我得问题解决能力。最后因为本次实验只有对数据库有清楚得掌握,同时熟悉规则才能合理编程,因此我在平时得学习中应当加大数据库与数据结构得学习力度,提高自己得编程能力。 人工智能课内实验报告 实验3:盲目搜索求解八数码问题 学  院:     自动化学院         班  

31、 级:   智能1501        姓  名:   刘少鹏 (33)   学    号:   06153034         日 期: 2017-03—30 10:15—12:00 人工智能课内实验3:盲目搜索求解8数码问题 1、 实验目得 (1) 熟悉人工智能系统中得问题求解过程; (2) 熟悉状态空间中得盲目搜索策略; (3) 掌握盲目搜索算法,重点就是宽度优先搜索与深度优先搜索算法. 2、 实验要求 用VC语言编程,采用宽度优先搜索与深度优先搜索方法,求解8数码问题 3、 实验内容 (1) 采用宽度

32、优先算法,运行程序,要求输入初始状态 假设给定如下初始状态S0 2  8  3 1 6 4 7 0  5     与目标状态Sg     2  1  6        4 0 8   7 5 3     验证程序得输出结果,写出心得体会。    (2)对代码进行修改(选作),实现深度优先搜索求解该问题 提示:每次选扩展节点时,从数组得最后一个生成得节点开始找,找一个没有被扩展得节点。这样也需要对节点添加一个就是否被扩展过得标志。 4 源代码及实验结果截图 (1) 实验源代码 #include 〈stdlib、h

33、〉 #include Typedef struct Node { int num[9]; //棋盘状态       int deepth; //派生得深度 g(n)           int diffnum; //不在位得数目 h(n)          int value; //耗散值 f(n)=g(n)+h(n)   struct Node * pre; ﻩ               struct Node * next;            struct

34、Node * parent; }numNode;   /* -- end of struct numNode —— */ int origin[9]; //棋盘初始状态 int target[9]; //棋盘目标状态 int numNode_num, total_step; numNode *open, *close; //Open表与Close表 numNode *create_numNode() { ﻩ return (numNode *)malloc(sizeof(numNode)); } numNode *open_getfirst(numNode *head)

35、 //返回第一项,并从Open表中删除 void open_insert(numNode *head, numNode *item); //向Open表中按序插入新节点 void close_append(numNode *head, numNode *item); //向Close表中插入新节点 int expand(numNode *item); //扩展节点 int print_result(numNode *item); //打印结果 numNode *copy_numNode(numNode *orgin); char isNewNode(numNode *open, 

36、numNode *close, int num[9]); //就是否在Open表或Close表中 void print_num(int num[9]); //打印棋盘状态 int diff(int num[9]); //求不在位棋子得个数 void init(); //初始化,获得棋盘初始状态与目标状态 void s *a, int *b); int operate(int num[], int op); void free_list(numNode *head); //* Name: 主函數 //* Description: 程序入口 int main(int argc, 

37、char *argv[]) { //初始化Open表与Close表 ﻩ  printf(”*****智能1501****\n");   printf("*****刘少鹏******\n”); ﻩ printf("*****06153034****\n”); ﻩ open = create_numNode(); close = create_numNode(); ﻩ open-〉pre = open->next = close—>pre = close—〉next = NULL; ﻩ  init(); //由用户输入初始与目标状态 ﻩ ﻩ//初始化初始节点

38、 ﻩ  numNode *p1; ﻩ  p1 = create_numNode(); ﻩ  p1-〉parent = NULL; ﻩ  p1—〉deepth = 0; ﻩ int i = 0;  for (i = 0; i〈9; i++) ﻩ { ﻩﻩ p1—>num[i] = origin[i]; ﻩ  } open_insert(open, p1); numNode_num = 1;  p1 = open_getfirst(open); while (p1 != NULL) { ﻩﻩ close_append(close,

39、p1); ﻩ if (expand(p1)) ﻩreturn EXIT_SUCCESS; p1 = open_getfirst(open);  } ﻩ printf(”No solution!\n"); return EXIT_SUCCESS; }        /* -—----—--- end of function main -——--——--— */ void init() { while (1) ﻩ{ printf(”Please input opriginal status:\nFor example:123456780

40、 stands for\n" ﻩ”1 2    3\n” ﻩ ”4    5 6\n” ﻩ ﻩ”7   8  0\n”); ﻩchar temp[10]; ﻩﻩscanf(”%s", &temp); int i = 0; ﻩfor (i = 0; i〈9 && temp[i] - ’0’ 〉= 0 && temp[i] - '0’ 〈= 8; i++) ﻩﻩ{ origin[i] = temp[i] - '0'; ﻩ } printf("Please input target status:\n”); ﻩscanf("%s",

41、 &temp); ﻩﻩint j = 0; ﻩﻩfor (j = 0; j〈9 && temp[j] - '0' 〉= 0 && temp[j] - '0' <= 8; j++) ﻩ { ﻩﻩtarget[j] = temp[j] — ’0’; ﻩ} ﻩsystem("cls"); if (i == 9 && j == 9) { ﻩ ﻩbreak; } } }     /* —--—— end of function init —-—-— */ void open_insert(numNode *head, numNode *item) {

42、 ﻩnumNode *p, *q; ﻩp = head—>next; q = head; ﻩwhile (p != NULL && item—>value 〉 p-〉value) { ﻩﻩq = p; ﻩp = p-〉next; } q—>next = item; ﻩitem-〉pre = q; ﻩitem->next = p; if (p != NULL) ﻩ{ ﻩﻩp—>pre = item; ﻩ} }    /* —-—-— end of function open_insert —--—- */ numNode *open_getf

43、irst(numNode *head) { ﻩnumNode *p; ﻩif (head-〉next == NULL) ﻩ{ ﻩreturn NULL; ﻩ} p = head—〉next; ﻩhead->next = p->next; if (p—〉next != NULL) ﻩ{ ﻩ p—>next—〉pre = head; } p—〉pre = NULL; p->next = NULL; ﻩreturn p; } /* -—-—— end of function open_getfirst -———— */ void close

44、append(numNode *head, numNode *item) { ﻩitem-〉next = head—〉next; ﻩitem—>pre = head; head-〉next = item; ﻩif (item->next != NULL) { ﻩﻩitem->next—>pre = item; ﻩ} }     /* ————- end of function close_append -—-—- */ int expand(numNode *p1) { numNode * p2; int op = 1; ﻩfor (op = 1;

45、op <= 4; op++) ﻩ{ p2 = copy_numNode(p1); ﻩﻩoperate(p2—〉num, op); if (isNewNode(open, close, p2-〉num) == ’N') ﻩﻩ{ ﻩﻩﻩp2—〉parent = p1; ﻩ p2->deepth = p1—>deepth + 1; ﻩ ﻩp2-〉diffnum = diff(p2->num); ﻩp2—〉value = p2—>deepth + p2—〉diffnum; ﻩﻩﻩif (p2-〉diffnum == 0) ﻩ{ total_step =

46、 print_result(p2); ﻩ ﻩprintf("Total step: %d\n", total_step); ﻩfree_list(open); ﻩﻩ free_list(close); ﻩ return 1; ﻩ ﻩ} ﻩﻩ else ﻩﻩﻩ{ ﻩnumNode_num++; open_insert(open, p2); ﻩﻩ } ﻩ} ﻩ else free(p2); } return 0; }   /* ——--— end of function expand -—-—- */ int op

47、erate(int m[], int op) { ﻩint blank; blank = 0; while (m[blank] != 0 && blank<9) ﻩ ++blank; if (blank == 9) ﻩﻩreturn 1; ﻩswitch (op) { case 1: /* up */ ﻩif (blank〉2) ﻩswap(m + blank, m + blank - 3); break; case 2: /* down */ ﻩﻩif (blank〈6) ﻩﻩﻩswap(m + blank, m + blank + 3);

48、 ﻩ break; ﻩcase 3: /* left */ if (blank != 0 && blank != 3 && blank != 6) ﻩ swap(m + blank, m + blank — 1); ﻩbreak; case 4: /* right */ if (blank != 2 && blank != 5 && blank != 8) ﻩﻩﻩswap(m + blank, m + blank + 1); ﻩ break; default: return 1; } return 0; } void s *a, int *b)

49、{ int c; c = *a; *a = *b; ﻩ*b = c; } numNode * copy_numNode(numNode *origin) { numNode *p; ﻩp = create_numNode(); p—>deepth = origin—〉deepth; p-〉diffnum = origin—>diffnum; ﻩp-〉value = origin-〉value; int i; ﻩfor (i = 0; i<9; i++) { ﻩ (p->num)[i] = (origin->num)[i]; } ﻩretur

50、n p; }    /* -—-—— end of function copy_numNode ——--— */ int diff(int num[9]) { ﻩint i, diffnum = 0; ﻩfor (i = 0; i〈9; i++) ﻩif (num[i] != target[i]) ﻩ diffnum++; return diffnum; }    /* ——--— end of function diff —--—- */ char isNewNode(numNode *open, numNode *close, int num[

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服