我现在是大四,我选的毕业设计里涉及嵌入式的东西,现在正在学习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版本时候再到别的浏览器下上传吧。期待您的批评,共同进步!!