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
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 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[






