- 9
- 0
- 约 7页
- 2017-06-07 发布于重庆
- 举报
c语言实现八数码问题
八数码问题源程序及注释:
#includestdio.h
#includeconio.h
int n,m;
typedef struct Node
{
char matrix[10];/*存储矩阵*/
char operate;/*存储不可以进行的操作,L代表不能左移R代表不能右移U代表不能上移D代表不能下移*/
char extend;/*是否可以扩展,Y代表可以,N代表不可以*/
int father;/*指向产生自身的父结点*/
}Node;
char start[10]=};/*此处没有必要初始化*/
char end[10]={1238 4765};/*此处没有必要初始化*/
Node base[4000];
int result[100];/*存放结果的base数组下标号,逆序存放*/
int match()/*判断是否为目标*/
{
int i;
for(i=0;i9;i++)
{
if(base[n-1].matrix[i]!=end[i])
{
return 0;
}
}
return 1;
}
void show()/*显示矩阵的内容*/
{
int i=1;
while(m=0)
{
int mm=result[m];
//clrscr();
printf(\n\n\n 状态方格\t\t步骤 %d,i);
printf(\n\n\n\n\n\t\t\t%c\t%c\t%c\n,base[mm].matrix[0],base[mm].matrix[1],base[mm].matrix[2]);
printf(\n\n\t\t\t%c\t%c\t%c\n,base[mm].matrix[3],base[mm].matrix[4],base[mm].matrix[5]);
printf(\n\n\t\t\t%c\t%c\t%c\n,base[mm].matrix[6],base[mm].matrix[7],base[mm].matrix[8]);
//sleep(1);
m--;
i++;
}
}
void leave()/*推理成功后退出程序之前要执行的函数,主要作用是输出结果*/
{
n--;
while(base[n].father!=-1)
{
result[m]=n;
m++;
n=base[n].father;
}
result[m]=0;
result[m+1]=\0;
show();
//clrscr();
printf(\n\n\n\n\n\n\n\n\n\t\t\t\t搜索结束\n\n\n\n\n\n\n\n\n\n);
getch();
//exit(0);
}
int left(int x)/*把下标为X的数组中的矩阵的空格左移*/
{
int i,j;
char ch;
for(i=0;i9;i++)
{
if(base[x].matrix[i]== )
break;
}
if(i==0||i==3||i==6||i==9)
{
return 0;
}
for(j=0;j9;j++)
{
base[n].matrix[j]=base[x].matrix[j];
}
ch=base[n].matrix[i-1];
base[n].matrix[i-1]=base[n].matrix[i];
base[n].matrix[i]=ch;
base[n].operate=R;
base[n].extend=Y;
base[n].father=x;
base[x].extend=N;
n++;
if(match(i))
leave();
return 1;
}
int right(int x)/*把下标为X的数组中的矩阵的空格右移*/
{
int i,j;
char ch;
for(i=0;i9;i++)
{
if(base[x].matrix[i]== )
break;
}
if(i==2||i==5||i==8||i==9)
{
return 0;
}
for(j=0;j9;j++)
{
base[n].matrix[j]=base[x].matrix[j];
}
ch=base[n].matrix[i+1];
base[n].matrix[i+1]=base[n].matrix[i];
base[n].matrix[i]=ch;
base[n].operate=L;
base[n].extend=Y;
base[n].father=x;
base[x].extend=N;
n++;
if(match(i))
leave();
return 1;
}
原创力文档

文档评论(0)