有界深度优先搜索的使用
题目要求
用有界深度优先搜索方法求解如图1所示八数码问题。初始状态为S0,目标状态为Sg,要求寻找从初始状态到目标状态的路径。(深度界限自行定义)
源代码如下:
/* dm DFS
* 2 8 1 2 3
* 1 6 3 --> 8 4
* 7 5 4 7 6 5
*
*
*
*
*/
#include<stdio.h>
#define DM 15
#define PATH 20
#define CLOSE 100000
typedef int BOOL;
#define TRUE 1
#define FALSE 0
int a[3][3];
int b[CLOSE][3][3]; //已遍历过的状态
int c[PATH][3][3]; //路径状态
int i0,j0;
void DFS(int i0,int j0);
void exchange(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int blank_left(int i0,int j0)
{
//空格左移
exchange(&a[i0][j0-1],&a[i0][j0]);
}
int blank_right(int i0,int j0)
{
//空格右移
exchange(&a[i0][j0+1],&a[i0][j0]);
}
int blank_up(int i0,int j0)
{
//空格上移
exchange(&a[i0-1][j0],&a[i0][j0]);
}
int blank_down(int i0,int j0)
{
//空格下移
exchange(&a[i0+1][j0],&a[i0][j0]);
}
void show_matrix(int a[3][3])
{
//打印矩阵
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
}
void save_matrix(int b[3][3],int