看了这个题自己写了代码,但不知道为什么没有返回,希望各位大神给下答案
# include "stdio.h"
# include "math.h"
# include "string.h"
char a[5][5],b[3][3];
int turn[4][2] = {-1,0,0,1,0,-1,1,0};
int kong_x,kong_y,t = 1;
int sum = 0;
void swap(int x,int y) //移动;
{
char t;
t = a[x][y];
a[x][y] = a[kong_x][kong_y];
a[kong_x][kong_y] = t;
kong_x = x;kong_y = y;
}
int chack() //判断是否完成;
{
int i,j,fg = 1;
for(i = 1;i <= 3;i ++)
for(j = 1;j <= 3;j ++)
if(a[i][j] != b[i-1][j-1]) fg = 0;
return fg;
}
void print()
{
int i,j;
for(i = 1;i <= 3;i ++)
{
for(j = 1;j <= 3;j ++)
printf("%c ",a[i][j]);
printf("\n");
}
}
void dfs()
{
int k,fg = 1;
if(fg == chack())
{
if(t>sum)t=sum;
sum = 0;
return;
}
else
for(k = 0;k < 4;k ++)
{
if(a[kong_x+turn[k][0]][kong_y+turn[k][1]] != '0')//判断是否可以交换
{
swap(kong_x+turn[k][0],kong_y+turn[k][1]);
sum ++;
// print();
dfs();
swap(kong_x+turn[k][0],kong_y+turn[k][1]); //回溯;
}
}
}
void find()
{
int i,j;
for(i = 1;i <= 3;i ++)
for(j = 1;j <= 3;j ++)
if(a[i][j] == '.')
{
kong_x = i;
kong_y = j;
printf("%d %d\n",i,j);
return;
}
}
int main(void)
{
int i,j;
char s[3][3];
memset(a,'0',sizeof(a)); //a初始为0;
scanf("%s",s);
scanf("%s",b);
for(i = 0;i < 3;i ++) // 吧起始状态移动到中间
for(j = 0;j < 3;j ++) a[i+1][j+1] = s[i][j];
find();
dfs();
printf("%d\n",t);
return 0;
}
[align=center]
[/align]