重回纯C数据结构,迟早要还的。。。记迷宫问题

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

你可能感兴趣的:(重回纯C数据结构,迟早要还的。。。记迷宫问题)