温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

栈的应用——迷宫

发布时间:2020-10-11 21:25:38 来源:网络 阅读:254 作者:LOVEMERIGHT 栏目:编程语言

栈和队列是数据结构中重要的部分,通过栈来实现走出迷宫。

1代表不能通行,0代表可以通行,将走的迷宫路线坐标不断地存入栈中,并赋成2,分别判断各个方向,如果是0则前进,1则判断下个方向。

迷宫的地图可以通过新建记事本,将地图输入。

代码实现:

struct Pos {	int _row;//行	int _col;//列 }; bool CheckIsAccess(int* a,int n,Pos next)//判断是否超出迷宫范围,是否可以前进 {	if((next._row>=0)&&(next._row<n)&&\	(next._col>=0)&&(next._col<n)&&\	(a[next._row*n+next._col]==0))	return true;	else	return false; } bool MazePath(int* a,int n,Pos& entry,stack<Pos>& path) {	Pos cur=entry;	path.push(cur);	while(!path.empty())	{	a[cur._row*n+cur._col]=2;//走过的地方赋成2	if(cur._row==n-1)//判断是否到达出口	{	return true;	}	//分别判断各个方向哪个可以前进	//上	Pos next=cur;	next._row--;	if(CheckIsAccess(a,n,next))	{	cur=next;	path.push(cur);	continue;	}	//下	next=cur;//将位置恢复到cur,再进行其他方向的判断	next._row++;	if(CheckIsAccess(a,n,next))	{	cur=next;	path.push(cur);	continue;	}	//左	next=cur;//将位置恢复到cur,再进行其他方向的判断	next._col--;	if(CheckIsAccess(a,n,next))	{	cur=next;	path.push(cur);	continue;	}	//右	next=cur;//将位置恢复到cur,再进行其他方向的判断	next._col++;	if(CheckIsAccess(a,n,next))	{	cur=next;	path.push(cur);	continue;	}	cur=path.top();//到达死角,回溯	path.pop();	} } void PrintMaze(int* a,int n)//打印迷宫 {	for(int i=0;i<n;i++)	{	for(int j=0;j<n;j++)	{	cout<<a[i*n+j]<<" ";	}	cout<<endl;	} } void GetMaze(int* a,int n) {	FILE* fout=fopen("MazeMap.txt","r");	assert(fout);	for(int i=0;i<n;i++)	{	for(int j=0;j<n;)	{	char ch=fgetc(fout);	if(ch=='0'||ch=='1')//只有是1或0的时候才将其存到二维数组中	{	a[i*n+j]=ch-'0';	++j;	}	else	{	continue;	}	}	}	fclose(fout); }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI