我现在是大四,我选的毕业设计里涉及嵌入式的东西,现在正在学习uc/os II,但发现这么多年来我是白学一场,双向链表都没有一个清晰系统的认识,痛!!故从图书馆借来Ellis Horowitz的数据结构基础来看,顿感沧海桑田,人的确是要为自己的过去埋单的。。。于是不管一些杂念,自己就要去用今天一天时间看完此书,每天把感兴趣的问题自己琢磨一下,也许靠自己的积累,我还可以补回来!在书中看到一个迷宫问题,有些手痒,自己编来,但这是我昨天晚上用2个小时编的,还有许多bug,今天上午又睡了懒觉过去,现在是我一天的开始(确实汗颜。。。)
为了督促自己改bug,也为了有共同喜好的兄弟姐妹,我把迷宫问题在这里写出来:
#include<stdio.h>
int a,b,c,d;
char mg[6][6]=
{
{0,0,0,0,0,1}, //6*6的迷宫,0代表可以通过,1代表不可以通过,从左上角开始,从右下角出去
{1,1,1,1,1,0},
{1,0,0,0,0,1},
{0,1,1,1,1,1},
{1,0,0,0,0,1},
{1,1,1,1,1,0}
};
typedef struct
{
int shu;
int heng;
int name;
}move;
move m[9]= //有9种走法:
{
{-1,-1,0}, //左上
{-1,0,1}, //正上
{-1,1,2}, //右上
{0,-1,3}, //左
{0,0,4}, //中(不动)
{0,1,5}, //右
{1,-1,6}, //左下
{1,0,7}, //正下
{1,1,8}, //右下
};
typedef struct
{
int s;
int h;
}position;
position p; //当前的位置
typedef struct
{
int ps;
int ph;
int mark;
}PAST;
PAST past[6][6]; //记录过去走过的位置
void main()
{
p.s=0;
p.h=0;
for(a=0;a<6;a++)
{
for(b=0;b<6;b++)
{
past[a][b].mark=0;
}
}
past[0][0].mark=1;
while((p.s!=5)||(p.h!=5))
{
int i;
for(i=0;i<9;i++)
{
if(((m[i].shu+p.s)<=5)&&((m[i].shu+p.s)>=0)&&((m[i].heng+p.h)<=5)&&((m[i].heng+p.h)>=0))
{
if(mg[m[i].shu+p.s][m[i].heng+p.h]==0)
{
if(past[m[i].shu+p.s][m[i].heng+p.h].mark!=1)
{
p.s=m[i].shu+p.s;
p.h=m[i].heng+p.h;
past[p.s][p.h].mark=1;
past[p.s][p.h].ps=p.s;
past[p.s][p.h].ph=p.h;
i=0;
}
}
}
}
}
for(c=0;c<6;c++)
{
printf("\n");
for(d=0;d<6;d++)
{
if(past[c][d].mark==1)
{
printf("0");
}
else printf("1");
}
}
printf("\n");
}
目前能做到的是如果只有一条路的话可以走出来,并且输出走过的路径(0代表走过,1代表没走过),但是输出的截图我在chrome下上传不了,不知为什么。不过这是我的0.1版本,在0.2版本时候再到别的浏览器下上传吧。期待您的批评,共同进步!!