/*
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MIX 100
int top=0;
//int link=-1;
void pushstack(int maze[][10],int stack[MIX][2],int reline,int recolumn);
void popstack(int maze[][10],int stack[MIX][2],int reline,int recolumn);
#define mix 100
//void Maze(int maze[][10],int line,int column) //随机生成迷宫
//{
// srand(time(NULL));
// for(int i=0;i<line;i++)
// {
// for(int j=0;j<column;j++)
// {
// maze[i][j]=1;
// if(!(i==0||i==7||j==0||j==9))
// {
// maze[i][j]=rand()%2;
// }
// printf("%2d",maze[i][j]);
// }
// printf("\n");
// }
//}
void FindMaze(int maze[][10],int stack[MIX][2],/*int putin[MIX][2],*/ /*int reline,int recolumn) //递归找出路
{
int count=0;
// if(maze[reline][recolumn]!=0) //逻辑有误!
// {;}
if(reline==6&&recolumn==8)
{
printf("可以走出迷宫!");
}
else if(reline!=6&&recolumn!=8)
{
maze[reline][recolumn]=2;
for(int i=reline-1;i<reline+2;i++)
{
for(int j=recolumn;j<recolumn+2;j++)
{
if(maze[i][j]==0)
{
count++;
if(count!=0)
{
pushstack(maze,stack,i,j); //入栈
// putin[++link][0]=i;
// putin[++link][1]=j;
FindMaze(maze,stack,i,j);
}
else
{
popstack(maze,stack,i,j); //出栈
}
}
}
}
}
}
void pushstack(int maze[][10],int stack[MIX][2],int reline,int recolumn) //储存可能的情况
{
stack[top][0]=reline;
stack[top][1]=recolumn;
top++;
}
void popstack(int maze[][10],int stack[MIX][2],int reline,int recolumn) //取出可能的回路
{
top--;
if(top!=-1)
{
FindMaze(maze,stack,stack[top][0],stack[top][1]);
}
}
int main()
{
int maze[8][10]={0};
for(int i=0;i<8;i++) //人为设计的迷宫图形
{
for(int j=0;j<10;j++)
{
maze[i][j]=1;
if(((i==1)&&(j==1||j==5))||((i==2)&&(j==2||j==4))||((i==3)&&(j==1||j==3||j==4||j==5||j==6||j==7))||((i==4)&&(j==1||j==5))||((i==5)&&(j==2||j==3||j==6||j==7||j==8))||((i==6)&&(j==1||j==4||j==5||j==8)))
{
maze[i][j]=0;
}
printf("%2d",maze[i][j]);
}
printf("\n");
}
int stack[MIX][2]={0}; //栈
// int putin[MIX][2]={0}
// Maze(maze,8,10);
FindMaze(maze,stack,putin,1,1);
return 0;
}
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MIX 100
int top=0;
//int link=-1;
void pushstack(int maze[][10],int stack[MIX][2],int reline,int recolumn);
void popstack(int maze[][10],int stack[MIX][2],int reline,int recolumn);
#define mix 100
//void Maze(int maze[][10],int line,int column) //随机生成迷宫
//{
// srand(time(NULL));
// for(int i=0;i<line;i++)
// {
// for(int j=0;j<column;j++)
// {
// maze[i][j]=1;
// if(!(i==0||i==7||j==0||j==9))
// {
// maze[i][j]=rand()%2;
// }
// printf("%2d",maze[i][j]);
// }
// printf("\n");
// }
//}
void FindMaze(int maze[][10],int stack[MIX][2],/*int putin[MIX][2],*/ /*int reline,int recolumn) //递归找出路
{
int count=0;
// if(maze[reline][recolumn]!=0) //逻辑有误!
// {;}
if(reline==6&&recolumn==8)
{
printf("可以走出迷宫!");
}
else if(reline!=6&&recolumn!=8)
{
maze[reline][recolumn]=2;
for(int i=reline-1;i<reline+2;i++)
{
for(int j=recolumn;j<recolumn+2;j++)
{
if(maze[i][j]==0)
{
count++;
if(count!=0)
{
pushstack(maze,stack,i,j); //入栈
// putin[++link][0]=i;
// putin[++link][1]=j;
FindMaze(maze,stack,i,j);
}
else
{
popstack(maze,stack,i,j); //出栈
}
}
}
}
}
}
void pushstack(int maze[][10],int stack[MIX][2],int reline,int recolumn) //储存可能的情况
{
stack[top][0]=reline;
stack[top][1]=recolumn;
top++;
}
void popstack(int maze[][10],int stack[MIX][2],int reline,int recolumn) //取出可能的回路
{
top--;
if(top!=-1)
{
FindMaze(maze,stack,stack[top][0],stack[top][1]);
}
}
int main()
{
int maze[8][10]={0};
for(int i=0;i<8;i++) //人为设计的迷宫图形
{
for(int j=0;j<10;j++)
{
maze[i][j]=1;
if(((i==1)&&(j==1||j==5))||((i==2)&&(j==2||j==4))||((i==3)&&(j==1||j==3||j==4||j==5||j==6||j==7))||((i==4)&&(j==1||j==5))||((i==5)&&(j==2||j==3||j==6||j==7||j==8))||((i==6)&&(j==1||j==4||j==5||j==8)))
{
maze[i][j]=0;
}
printf("%2d",maze[i][j]);
}
printf("\n");
}
int stack[MIX][2]={0}; //栈
// int putin[MIX][2]={0}
// Maze(maze,8,10);
FindMaze(maze,stack,putin,1,1);
return 0;
}
*/
本文介绍了一种使用栈数据结构实现的迷宫求解算法。通过递归方式探索迷宫的所有可能路径,并标记已访问区域避免重复搜索。该算法能够找到从指定起点到终点的有效路径。
1910

被折叠的 条评论
为什么被折叠?



