首页 > 编程知识 正文

用a星算法解决八数码问题,贝叶斯算法代码

时间:2023-05-05 22:11:23 阅读:112559 作者:2004

1、程序源代码

#包含

#包含

结构节点{

int a[3][3];//二维排列存储8个数字

int hx; //函数h(x )值表示与目标状态的差

结构节点*父项; //指向父节点的指针

结构节点*下一步; //指向链表中下一个节点的指针

(;

//hx函数/

inthx(ints[3][3] ) )。

//函数说明:计算s和目标状态之间的差值

int i,j;

int hx=0;

intsg [3] [3]={ 1,2,3,8,0,4,7,6,5 };

for(I=0; i3; I )

for(j=0; j3; j )

if(s ) I ) j )!=sg[i][j] )

hx;

返回hx;

}

//hx函数end//

//extend扩展函数/

sructnode*extend(node*ex ) )。

//函数说明:扩展ex指向的节点,将扩展的节点合并为一个

//单链表,head指定该链表的开头节点,作为返回值

int i,j,m,n; //循环变量

int t; //临时替换变量

int flag=0;

int x[3][3]; //暂时保存二维数组

结构节点* p、*q、*head;

head=(node* ) malloc ) sizeof (node ); //head

p=head;

q=head;

头下一个=空; //初始化

for(I=0; i3; 找出I//二维数组中0的位置

{

for(j=0; j3; j )

选定文档

if(ex-a(I ) j )==0) ) ) )

{

flag=1;

布雷克;

}

if(flag==1) )。

布雷克;

}

for(m=0; m3; 为m//x分配ex-a

for(n=0; n3; n )

x[m][n]=ex-a[m][n];

根据//0的位置,进行与x对应的变换

//情况1

if(I-1=0) )

{

t=x[i][j]; x[i][j]=x[i-1][j]; x[i-1][j]=t;

flag=0;

for(m=0; m3; m )将//x分配给a

for(n=0; n3; n )

if(x[m][n]==ex-parent-a[m] () ) ) ) ) )。

闪光灯;

If (标志!=9)

{

q=(node* ) malloc ) sizeof (node );

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。