VB八数码问题人工智能Word文档格式.docx
- 文档编号:16187360
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:12
- 大小:28.35KB
VB八数码问题人工智能Word文档格式.docx
《VB八数码问题人工智能Word文档格式.docx》由会员分享,可在线阅读,更多相关《VB八数码问题人工智能Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
//棋盘目标状态
intnumNode_num,total_step;
numNode*open,*close;
//Open表和Close表
numNode*create_numNode()
{
return(numNode*)malloc(sizeof(numNode));
}
numNode*open_getfirst(numNode*head);
//返回第一项,并从Open表中删除
voidopen_insert(numNode*head,numNode*item);
//向Open表中按序插入新节点
voidclose_append(numNode*head,numNode*item);
//向Close表中插入新节点
intexpand(numNode*item);
//扩展节点
intprint_result(numNode*item);
//打印结果
numNode*copy_numNode(numNode*orgin);
charisNewNode(numNode*open,numNode*close,intnum[9]);
//是否在Open表或Close表中
voidprint_num(intnum[9]);
//打印棋盘状态
intdiff(intnum[9]);
//求不在位棋子的个数
voidinit();
//初始化,获得棋盘初始状态和目标状态
voidswap(int*a,int*b);
intoperate(intnum[],intop);
voidfree_list(numNode*head);
/*
*===FUNCTION======================================================================
*Name:
主函數
*Description:
程序入口
*=====================================================================================
*/
int
main(intargc,char*argv[])
//初始化Open表和Close表
open=create_numNode();
close=create_numNode();
open->
pre=open->
next=close->
pre=close->
next=NULL;
init();
//由用户输入初始和目标状态
//初始化初始节点
numNode*p1;
p1=create_numNode();
p1->
parent=NULL;
deepth=0;
inti=0;
for(i=0;
i<
9;
i++)
{
num[i]=origin[i];
}
open_insert(open,p1);
numNode_num=1;
p1=open_getfirst(open);
while(p1!
=NULL)
close_append(close,p1);
if(expand(p1))
returnEXIT_SUCCESS;
printf("
Nosolution!
\n"
);
}/*----------endoffunctionmain----------*/
void
init()
while
(1)
Pleaseinputopriginalstatus:
\nForexample:
123456780standsfor\n"
"
123\n"
456\n"
780\n"
chartemp[10];
scanf("
%s"
&
temp);
i<
9&
&
temp[i]-'
0'
>
=0&
<
=8;
origin[i]=temp[i]-'
;
Pleaseinputtargetstatus:
intj=0;
for(j=0;
j<
temp[j]-'
j++)
target[j]=temp[j]-'
system("
cls"
if(i==9&
j==9)
break;
}/*-----endoffunctioninit-----*/
open_insert(numNode*head,numNode*item)
numNode*p,*q;
p=head->
next;
q=head;
while(p!
=NULL&
item->
value>
p->
value)
q=p;
p=p->
q->
next=item;
pre=q;
next=p;
if(p!
pre=item;
}/*-----endoffunctionopen_insert-----*/
numNode*
open_getfirst(numNode*head)
numNode*p;
if(head->
next==NULL)
returnNULL;
head->
next=p->
if(p->
next!
=NULL)
next->
pre=head;
pre=NULL;
returnp;
}/*-----endoffunctionopen_getfirst-----*/
close_append(numNode*head,numNode*item)
next=head->
if(item->
next!
=NULL)
}/*-----endoffunctionclose_append-----*/
expand(numNode*p1)
numNode*p2;
intop=1;
for(op=1;
op<
=4;
op++)
p2=copy_numNode(p1);
operate(p2->
num,op);
if(isNewNode(open,close,p2->
num)=='
N'
)
p2->
parent=p1;
deepth=p1->
deepth+1;
diffnum=diff(p2->
num);
value=p2->
deepth+p2->
diffnum;
if(p2->
diffnum==0)
total_step=print_result(p2);
Totalstep:
%d\n"
total_step);
free_list(open);
free_list(close);
return1;
else
numNode_num++;
open_insert(open,p2);
free(p2);
return0;
}/*-----endoffunctionexpand-----*/
operate(intm[],intop)
intblank;
blank=0;
while(m[blank]!
blank<
9)
++blank;
if(blank==9)
switch(op){
case1:
/*up*/
if(blank>
2)
swap(m+blank,m+blank-3);
case2:
/*down*/
if(blank<
6)
swap(m+blank,m+blank+3);
case3:
/*left*/
if(blank!
blank!
=3&
=6)
swap(m+blank,m+blank-1);
case4:
/*right*/
=2&
=5&
=8)
swap(m+blank,m+blank+1);
default:
swap(int*a,int*b)
intc;
c=*a;
*a=*b;
*b=c;
copy_numNode(numNode*origin)
p=create_numNode();
deepth=origin->
deepth;
diffnum=origin->
value=origin->
value;
inti;
(p->
num)[i]=(origin->
num)[i];
}/*-----endoffunctioncopy_numNode-----*/
diff(intnum[9])
inti,diffnum=0;
for(i=0;
i++)
if(num[i]!
=target[i])
diffnum++;
returndiffnum;
}/*-----endoffunctiondiff-----*/
char
isNewNode(numNode*open,numNode*close,intnum[9])
p=open->
if(p->
num[i]!
=num[i])
if(i==9)
return'
O'
//Open
p=close->
i++)
C'
//Close
}/*-----endoffunctionisNewNode-----*/
free_list(numNode*head)
q=p->
free(p);
p=q;
free(head);
}/*-----endoffunctionfree_list-----*/
print_num(intnum[9])
{
%d\t"
num[i]);
if((i%3)==2)
}/*-----endoffunctionprint_num-----*/
print_result(numNode*item)
intstep;
p=item;
step=print_result(p->
parent);
\nStep%d:
step+1);
print_num(p->
returnstep+1;
return-1;
}
实验结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 数码 问题 人工智能