⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze.txt

📁 利用所学过的栈的知识从迷宫的入口到出口找到一条路径
💻 TXT
字号:
#include<stdio.h>
#include<malloc.h>

int Maze[6][6]={1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1};

typedef struct{
	int x;
	int y;
	int di;
}postype;

typedef struct{
	postype *base;
	postype *top;
	int stacksize;
}Sqstack;

void Set(postype &a,postype b){
	a.x=b.x;
	a.y=b.y;
	a.di=b.di;
}//赋值函数

void Initstack(Sqstack &s){
	s.base=(postype*)malloc(20*sizeof(postype));
	s.top=s.base;
	s.stacksize=20;
}//Initstack

void Pop(Sqstack s,postype &e){
	if(s.top!=s.base) {
		s.top--;
		e.di=s.top->di;   
		e.x=s.top->x;    e.y=s.top->y;
	}
}//Pop

void Push(Sqstack s,postype e){
	s.top->di=e.di;     
	s.top->x=e.x;    s.top->y=e.y;
	s.top++;
}//Push
 
int Stackempty(Sqstack s){
	return(s.top!=s.base);
}//判断栈是否空,是则返回0

void Nextpos(postype &s,int di){
	switch(di){
	case 1:  s.x++; break;
	case 2:  s.y++; break;
	case 3:  s.x--; break;
	case 4:  s.y--; break;
	}
	s.di=di;
}//取下一个通道块

void Mazepath(postype start,postype end){
	Sqstack s;  
	postype curpos,e;
	Set(curpos,start);//将start作为当前位置
	Initstack(s);
	do{
		if(!Maze[curpos.x][curpos.y]){
			Push(s,curpos);	printf("(%d,%d)",curpos.x,curpos.y); 
			Set(e,curpos);
			Maze[curpos.x][curpos.y]=1;
			if(curpos.x==4&&curpos.y==4)  break;
			else{
				Nextpos(curpos,1);  
			}
		}
		else{
			if(!Stackempty(s)){
				Pop(s,e);  
				while(e.di==4&&!Stackempty(s)){
					Maze[e.x][e.y]=-1;
					Pop(s,e);    
				}
				if(e.di<4){
					e.di++;   
					Push(s,e);
					Set(curpos,e);
					Nextpos(curpos,curpos.di);
				}
			}
		}
	}while(!Stackempty(s));
	while(!Stackempty(s)){
		Pop(s,curpos);
		printf("(%d,%d)",curpos.x,curpos.y);
	}
	
}//迷宫路径函数

void main(){
	postype  start,end;
	start.x=1;   start.y=1;
	end.x=6;     end.y=6;
	printf("迷宫路径如下:\n");
	Mazepath(start,end);
}//main




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -