八数码问题用C语言编程,注意C语言!!!

八数码问题用C语言编程,注意C语言!!!,第1张

基于51的程序:

#include <reg52.h>

sbit sda=P0^5

sbit scl=P0^6

code char led_code[19]={0x11,0xd7,0x32,0x92,0xd4, // 0,1,2,3,4

0x98,0x18,0xd3,0x10,0x90, // 5,6,7,8,9

0x50,0x1c,0x39,0x16,0x38, // a,b,c,d,e,

0x78,0xfe,0xef,0xff} // f - dot dark

void seperate(unsigned char second,minute,hour) //1调用拆分函数

void display(unsigned char second,minute,hour) //慎凯 2调用显示函数 一定要在各处强调渗岩unsignde吗?

void shift(unsigned char) //3调用移位函数

void delay_1s(unsigned int x) //4调用延时函数

unsigned char second,minute,hour

unsigned char second0,second1,

minute0,minute1,

hour0,hour1// 这三行表示了时、分、秒所占数码管的个数和位置。 叫形参?

void main()

{

while(1)

{

for(hour=0hour<24hour++) //三个for语句的安排妙啊! 我们看到的钟表时分秒的变化

{

for(minute=0minute<60minute++)

{

for(second=0second<60second++)

{

display(second,minute,hour)

delay_1s(65535)

}

}

}

}

}

void display(unsigned char second,minute,hour) //2对显示函数的说明

{

seperate(second,minute,hour)

shift(second0)

shift(second1)

shift(16)

shift(minute0)

shift(minute1)

shift(16)

shift(hour0)

shift(hour1)

}

void seperate(unsigned char second,minute,hour)//1对拆分函数的说明

{

second0=second%10

second1=second/10

minute0=minute%10

minute1=minute/10

hour0=hour%10

hour1=hour/10

}

void shift(unsigned char n) //3对移位函数的丛孝御说明

{

unsigned char dat,minute

dat=led_code[n]

scl=0

for(minute=0minute<8minute++)

{

if (dat&0x80) sda=1

else sda=0

scl=1

scl=0

dat<<=1

}

}

void delay_1s(unsigned int a) //4对延时函数的说明

{

while(a--)

}

帮你改好了,一共有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昞揑崻?揰*/

/*****************************************************/

/* 敓悢柤徧丗output() */

/* 岟擞?柧丗?弌巜?P巜岦揑?揰揑悢悩 */

/****************************************************/

void output(struct link *p)

{

int i,j

while(p!=NULL)

{for(i=0i<3i++) /*岘?弌峊惂*/

{

for(j=0j<3j++) /*楍?弌峊惂*/

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=0i<3i++) /*岘斾?峊惂*/

{

for(j=0j<3j++) /*楍斾?峊惂*/

{

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=0i<3i++)/*?庢0揑嵖?*/

{

for(j=0j<3j++)

{

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=0i<3i++)/*?怴?揥揑?揰??*/

{

for(j=0j<3j++)

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=0i<3i++)/*?怴?揥揑?揰??*/

{

for(j=0j<3j++)

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=0i<3i++)/*?怴?揥揑?揰??*/

{

for(j=0j<3j++)

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=0i<3i++)/*?怴?揥揑?揰??*/

{

for(j=0j<3j++)

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=0i<3i++) /*?庢敧悢?揑弶峦忬?*/

{

for(j=0j<3j++)

scanf("%d",&open_head->data[i][j])/*攃弶峦忬?懚曻嵼怽?揑?揰拞丆懄Open昞*/

}

printf("Please input the final state of <eight puzzle>:\n")

for(i=0i<3i++) /*?庢敧悢?揑栚?忬?*/

{

for(j=0j<3j++)

scanf("%d",&destination[i][j])/*攃栚?忬?悢悩懚曻嵼destination[][]拞*/

}

open_head->layer=0/*弶峦壔弶峦忬??揰揑?悢?0丆昞帵???岘?揥 */

eight(open_head,destination)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8238244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存