C语言 广度、深度、等价优先搜索啊

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 21:42:22
C语言 广度、深度、等价优先搜索啊

C语言 广度、深度、等价优先搜索啊
C语言 广度、深度、等价优先搜索啊

C语言 广度、深度、等价优先搜索啊
帮你改好了,一共有8个错误:
主要是:
1. output()函数少了一个花括号
2. 一些该传地址的地方传了值
3. 有一个变量没定义:eight()函数中的open_link_point,我先改为open_point了
下面是改后的代码,改的地方我用/////////////注明了.
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define max_layer 5 /*嵟戝?揥?悢岹掕?*/
#define true 1
#define fail 0
#define null 0
struct link
{
int data[3][3];/*敧悢?忬?*/
int layer; /*?揰揑?悢*/
struct link *next;
struct link *prior;
};
struct link *close_head; /*Close昞揑崻?揰*/
struct link *open_head; /*Open昞揑崻?揰*/
//
void output(struct link *p)
{
int i,j;
while(p!=NULL)
{for(i=0;i<3;i++) /*岘?弌峊惂*/
{
for(j=0;j<3;j++) /*楍?弌峊惂*/
printf("%d ",p->data[i][j]);/*?弌i岘j楍忋揑悢悩*/
printf("\n"); /*?弌堦岘悢悩丆夞?岘*/
}
printf("---------------------\n"); /*?弌堦忦墶?埲嬫暘洜枊忋懘懠?揰悢悩*/
p--;
}
}////////////////////1
/* 敓悢柤徧丗compare*/
/* 岟擞?柧丗彨巜?Operate巜岦揑?揰拞揑悢悩梌择?悢?dest拞揑悢悩?岘斾?*/
int compare(struct link *q,int dest[3][3])
{
int i,j,count=0;
for(i=0;i<3;i++) /*岘斾?峊惂*/
{
for(j=0;j<3;j++) /*楍斾?峊惂*/
{
if(q->data[i][j]==dest[i][j])/*斾?i岘j楍忋揑悢悩*/
count++; /*?悢婍壛堦*/
else /*扅梫?桳堦槩悢悩晄憡摍*/
{
/*懄晓夞 fail丆愰崘斾?幐?*/
j=3; /*?惂悇弌for弞?*/
i=3; /*?惂悇弌for弞?*/
return 0;
}
}
}
if(count==9)/*憡摍揑悢悩揑槩悢梌?悢暯曽憡摍*/
return 1; /*昞帵悢悩搒?憡摍丆晓夞true */
}
/* 敓悢柤徧丗eight()*/
/* 岟擞?柧丗捠?怺搙?揥揑曽帏漄弌敧悢?樃弶峦忬?摓栚?忬?揑楬宎 */
int eight(struct link *open_head,int dest[3][3])
{
int i,j,zero_x,zero_y; /*0揑墶嵖?丆0揑?嵖?*/
struct link *new_point; /*?栋open昞揑堦槩?巜?*/
struct link *open_point=open_head;/*open昞憖嶌巜?1*/ ////////////2
struct link *close_point;
while(open_point!=NULL) ///////////////////3open_link_point
{
close_point=open_point;
open_point->prior->next=NULL;
open_point--;
if(compare(close_point,dest)==1)
{
printf("find solution");
output(close_point);
return 1;
}
else
{
if(close_point->layer>max_layer)
{
close_point->next=open_point; ////////////4
close_point++;
}
else
{
for(i=0;i<3;i++)/*?庢0揑嵖?*/
{
for(j=0;j<3;j++)
{
if(close_point->data[i][j]==0) /*data or dest*/
{
zero_x=i;/*墶嵖?*/
zero_y=j;/*?嵖?*/
j=3; /*?惂戅弌弞?*/
i=3; /*?惂戅弌弞?*/
}
}
}
if((zero_x-1)>=0)/*墲忋堏*/
{ /*怽?撪懚嬻?*/
new_point=(struct link *)malloc(sizeof(struct link));
for(i=0;i<3;i++)/*?怴?揥揑?揰?*/
{
for(j=0;j<3;j++)
new_point->data[i][j]=close_point->data[i][j];
}
new_point->data[zero_x][zero_y]=new_point->data[zero_x-1][zero_y];
new_point->data[zero_x-1][zero_y]=0;
open_point->next=new_point; ////////////////5
open_point++;
}
if((zero_x+1)<3)/*墲压堏*/
{ /*怽?撪懚嬻?*/
new_point=(struct link *)malloc(sizeof(struct link));
for(i=0;i<3;i++)/*?怴?揥揑?揰?*/
{
for(j=0;j<3;j++)
new_point->data[i][j]=close_point->data[i][j];
}
new_point->data[zero_x][zero_y]=new_point->data[zero_x+1][zero_y];
new_point->data[zero_x+1][zero_y]=0;
open_point->next=new_point;///////////////6
open_point++;
}
if((zero_y-1)>=0)/*0墲塃堏*/
{ /*怽?撪懚嬻?*/
new_point=(struct link *)malloc(sizeof(struct link));
for(i=0;i<3;i++)/*?怴?揥揑?揰?*/
{
for(j=0;j<3;j++)
new_point->data[i][j]=close_point->data[i][j];
}
new_point->data[zero_x][zero_y]=new_point->data[zero_x][zero_y-1];
new_point->data[zero_x][zero_y-1]=0;
open_point->next=new_point;/////////////////////// 7
open_point++;
}
if((zero_y+1)<3)/*0墲嵍堏*/
{ /*怽?撪懚嬻?*/
new_point=(struct link *)malloc(sizeof(struct link));
for(i=0;i<3;i++)/*?怴?揥揑?揰?*/
{
for(j=0;j<3;j++)
new_point->data[i][j]=close_point->data[i][j];
}
new_point->data[zero_x][zero_y]=new_point->data[zero_x][zero_y+1];
new_point->data[zero_x][zero_y+1]=0;
open_point->next=new_point;////////////////////////8
open_point++;
}
}
}
}
if(open_point=NULL)
printf("no solution");
}
/* 敓悢柤徧丗main*/
void main()
{
int i,j;
int destination[3][3]; /*择?悢?丆梡埲懚曻栚?忬?*/
struct link *open_head=(struct link *)malloc(sizeof(struct link)); /*怽?堦槩?揰嬻?*
printf("The max dimention is 3"); /*采恽梡?敧悢?揑?悢戝雕*/
printf("Please input the initial state of <eight puzzle>:\n");
for(i=0;i<3;i++) /*?庢敧悢?揑弶峦忬?*/
{
for(j=0;j<3;j++)
scanf("%d",&open_head->data[i][j]); /*攃弶峦忬?懚曻嵼怽?揑?揰拞丆懄Open昞*/
}
printf("Please input the final state of <eight puzzle>:\n");
for(i=0;i<3;i++) /*?庢敧悢?揑栚?忬?*/
{
for(j=0;j<3;j++)
scanf("%d",&destination[i][j]); /*攃栚?忬?悢悩懚曻嵼destination[][]拞*/
}
open_head->layer=0; /*弶峦壔弶峦忬?揰揑?悢?0丆昞帵?岘?揥 */
eight(open_head,destination);
}

C语言 广度、深度、等价优先搜索啊 深度优先搜索和广度优先搜索反映在数据结构上的差别是什么? 搜索算法:这个既不是深度优先,也不是广度优先,这叫什么搜索算法? 实现图的广度优先搜索算法需使用的辅助数据结构为( ) A.栈 B.队列 C.二叉树 还有深度优先, 深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系? 深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系 dijkstra算法是深度优先还是广度优先? 学程序设计是深度优先还是广度优先? 1.用邻接表表示图 广度优先搜索 通常采用什么实现算法 a 栈 b 队列 c 树 d图2.用邻接表表示图 深度优先搜索 通常采用什么实现算法a 栈 b 队列 c 树 d图 图中,判断那两个顶点距离最远.采用广度优先算法?c语言编写 (求解C程序高手)用正向表存储图的数据,并实现图的深度优先搜索和广度优先搜索.正向表是对邻接矩阵的行进行压缩的结果,它的特点是将每个顶点的邻接顶点集中在一起存放.有向图的正 什么是广度和深度啊 深度优先搜索算法解释下? 为什么用深度优先算法查找连通分支能用广度优先算法吗?为什么? 一个图的深度优先生成树和广度优先生成树唯一吗 采用广度优先策略搜索的算法是( ).A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 广度优先生成树怎么得到?知道如何广度搜索,但生成树的边怎么来的? 写出对给定的无定向图从V1结点开始广度优先搜索历序列和广度优先生成树.