#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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)