棧的應用--迷宮

#include<stdio.h>
#include<stack>
#include<stdlib.h>
#define MAXMATRIXSIZE 100
#define MAXSTACKSIZE 100
using namespace std;
stack <struct MazePosition> s;
struct offsets{
	short int vert;
	short int horiz;
}; 

struct MazePosition{
	short int row;//當前行 
	short int col;//當前列 
	short int dir;//下一方向的序號 
};

void path(int maze[][MAXMATRIXSIZE],int exitrow,int exitcol)
{
	struct offsets move[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
	int mark[MAXMATRIXSIZE][MAXMATRIXSIZE]={0};
	int i;
	struct MazePosition p;
	short int row,col,nextrow,nextcol,dir;
	bool found=false;
	
	mark[exitrow][exitcol]=1;//走過的標記,路徑不能重複了 
	p.row=exitrow;
	p.col=exitcol;
	p.dir=0; 
	s.push(p);
	
	while(!s.empty()&&!found)
	{
		p=s.top();
		s.pop();
		row=p.row;col=p.col;dir=p.dir;
		while(dir<8&&!found)
		{
			nextrow=row+move[dir].vert;
			nextcol=col+move[dir].horiz;
			if(nextrow==1&&nextcol==1) found=true;  //如果到達出口
			else 
			{
				if(!maze[nextrow][nextcol]&&!mark[nextrow][nextcol])
				{
					mark[nextrow][nextcol]=1;
					p.row=row;p.col=col;p.dir=dir+1;
					s.push(p);
					row=nextrow;col=nextcol;dir=0;
				 }
				 else ++dir;
			 } 
		}
		if(found)
		{
			printf("找到路徑如下\n");
			printf("行 列\n");
			printf("1  1\n");
			printf("%d %d\n",row,col);
			while(!s.empty())
			{
				p=s.top();
				s.pop();
				printf("%d %d\n",p.row,p.col);
			 } 
		}
		else
		printf("無解"); 
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章