分享
 
 
 

用C语言实现八数码问题

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

#include<stdio.h>

#include<conio.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]={"83426517 "};/*此处没有必要初始化*/

char end[10]={"1238 4765"};/*此处没有必要初始化*/

Node base[4000];

int result[100];/*存放结果的base数组下标号,逆序存放*/

int match()/*判断是否为目标*/

{

int i;

for(i=0;i<9;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 http://www.zhensoft.com ZHEN SHI LEI\t\tStep %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\tThe End\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;i<9;i++)

{

if(base[x].matrix[i]==' ')

break;

}

if(i==0||i==3||i==6||i==9)

{

return 0;

}

for(j=0;j<9;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;i<9;i++)

{

if(base[x].matrix[i]==' ')

break;

}

if(i==2||i==5||i==8||i==9)

{

return 0;

}

for(j=0;j<9;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;

}

int up(int x)/*把下标为X的数组中的矩阵的空格上移*/

{

int i,j;

char ch;

for(i=0;i<9;i++)

{

if(base[x].matrix[i]==' ')

break;

}

if(i==0||i==1||i==2||i==9)

{

return 0;

}

for(j=0;j<9;j++)

{

base[n].matrix[j]=base[x].matrix[j];

}

ch=base[n].matrix[i-3];

base[n].matrix[i-3]=base[n].matrix[i];

base[n].matrix[i]=ch;

base[n].operate='D';

base[n].extend='Y';

base[n].father=x;

base[x].extend='N';

n++;

if(match(i))

leave();

return 1;

}

int down(int x)/*把下标为X的数组中的矩阵的空格下移*/

{

int i,j;

char ch;

for(i=0;i<9;i++)

{

if(base[x].matrix[i]==' ')

break;

}

if(i==6||i==7||i==8||i==9)

{

return 0;

}

for(j=0;j<9;j++)

{

base[n].matrix[j]=base[x].matrix[j];

}

ch=base[n].matrix[i+3];

base[n].matrix[i+3]=base[n].matrix[i];

base[n].matrix[i]=ch;

base[n].operate='U';

base[n].extend='Y';

base[n].father=x;

base[x].extend='N';

n++;

if(match(i))

leave();

return 1;

}

main()

{

int i;

char a[20],b[20];

n=1;

textcolor(LIGHTGREEN);

clrscr();

/*以下是输入初始和目标矩阵,并把输入的0转换为空格*/

printf("Please input the start 9 chars:");

scanf("%s",a);

printf("Please input the end 9 chars:");

scanf("%s",b);

for(i=0;i<9;i++)

{

if(a[i]=='0')

{

start[i]=' ';

continue;

}

if(b[i]=='0')

{

end[i]=' ';

continue;

}

start[i]=a[i];

end[i]=b[i];

}

start[9]='\0';

end[9]='\0';

for(i=0;i<9;i++)

{

base[0].matrix[i]=start[i];

}

base[0].operate='N';

base[0].extend='Y';

base[0].father=-1;

/*以上是为第一个base数组元素赋值*/

for(i=0;n<4000;i++)

{

if(base[i].extend=='Y')

{

if(base[i].operate=='L')

{

right(i);up(i);down(i);

}

if(base[i].operate=='R')

{

left(i);up(i);down(i);

}

if(base[i].operate=='U')

{

left(i);right(i);down(i);

}

if(base[i].operate=='D')

{

left(i);right(i);up(i);

}

if(base[i].operate=='N')

{

left(i);right(i);up(i);down(i);

}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有