首页 > 编程知识 正文

A算法解决八数码问题,快速排序算法c语言

时间:2023-05-05 05:39:03 阅读:112571 作者:4763

启发式搜索算法解决八数字问题(c语言)

1、程序源代码

#包含

#包含

结构节点{

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

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

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

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

(;

----------------------------/

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

//----------------扩展函数------------/

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 );

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

for(n=0; n3; n )

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

q-parent=ex;

q-hx=hx(q-a );

q-next=NULL;

p-next=q;

p=p-next;

}

}

//情况2

for(m=0; m3; m )将ex-a重新分配给x,即还原x

for(n=0; n3; n )

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

if(I1=2) )

{

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

flag=0;

for(m=0; m3; m )

for(n=0; n3; n )

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

闪光灯;

If (标志!=9)

{

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

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

for(n=0; n3; n )

q-a[m][n]=x[m][n]

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