链栈求解迷宫
来源:互联网 发布:足球角球比分数据 编辑:程序博客网 时间:2024/06/14 13:45
【问题描述】
以一个mXn的矩阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
【任务要求】
实现链栈求解迷宫从入口到出口的一条可行通路。
【测试数据】
迷宫的测试数据如下:左上角(0,1)为入口,右下角(8,9)为出口。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int X;
int Y;
struct node *next;
}NODE;
typedef struct
{
struct NODE *top;
int cnt;
}STACK;
STACK *Creatstack()//创建链栈
{
STACK *S;
S = (STACK *)malloc(sizeof(STACK));
if (S == NULL)
{
printf("创建失败");
exit(1);
}
else
{
S->top = NULL;
S->cnt = 0;
}
return S;
}
void Iputstack(STACK *S, int x, int y)
{
NODE *s;
s = (NODE *)malloc(sizeof(NODE));
if (s != NULL)
{
s->X = x;
s->Y = y;
s->next = S->top;//S->top是和s同样类型的结点,将新结点的后继指向一个地址(这个地址其实可以看成是单链表的头结点看待)
S->top = s;//给指向的地址复制,其实可以看成是把栈顶指针指向新结点
S->cnt++;
}
}
void Outstack(STACK *S)
{
if (S->top != NULL)
{
NODE *s,*p;
s = S->top;
p=s->next;
free(s);
S->top = p;
S->cnt--;
}
}
int main()
{
int i;
STACK *S;
NODE *p;
int Hx, Hy, Ex, Ey,Px,Py;
S = Creatstack();
int M[10][10] = {
{ 1,0,1,1,1,1,1,1,1,1 },
{ 1,0,0,1,0,0,0,1,0,1 },
{ 1,0,0,1,0,0,0,1,0,1 },
{ 1,0,0,0,0,1,1,0,0,1 },
{ 1,0,1,1,1,0,0,0,0,1 },
{ 1,0,0,0,1,0,0,0,0,1 },
{ 1,0,1,0,0,0,1,0,0,1 },
{ 1,0,1,1,1,0,1,1,0,1 },
{ 1,1,0,0,0,0,0,0,0,0 },
{ 1,1,1,1,1,1,1,1,1,1 }
};
Hx= 0; Hy = 1;
Ex = 8; Ey = 9;
Px = Hx, Py = Hy;
Iputstack(S, Hx, Hy);
while (S->top != NULL)//栈空表示无路可走
{
p = S->top;//每次循环都把栈中的栈顶的地址给p
Px = p->X; Py = p->Y;//把栈顶的X,Y值取出来作为本次循环的起始坐标点
if (Px == Ex&&Py == Ey)//找到出口,跳出循环
break;
if (M[Px-1][Py] == 0)//上方向
{
Iputstack(S, Px-1, Py);//满足条件的入栈,下面代码同理
M[Px - 1][Py] = 2;//表示走过
}
else if (M[Px + 1][Py] == 0)//下方向
{
Iputstack(S, Px+1, Py);
M[Px + 1][Py] = 2;//表示走过
}
else if (M[Px][Py-1] == 0)//左方向
{
Iputstack(S, Px-1, Py);
M[Px][Py-1] = 2;//表示走过
}
else if (M[Px][Py+1] == 0)//右方向
{
Iputstack(S, Px, Py+1);
M[Px][Py+1] = 2;//表示走过
}
else
{
Outstack(S);
M[Px][Py] = 3;
}
}
p = S->top;//p指向栈顶
for (i = 0; i < S->cnt; i++)//输出栈中值
{
printf("(%d,%d)\n", p->X, p->Y);
p = p->next;//p每次循环完指向后继结点
}
return 0;
}
- 链栈求解迷宫
- c++ 链栈求解迷宫
- 栈---数组---迷宫求解
- 栈求解迷宫
- 栈解决迷宫求解
- 迷宫求解(栈)
- 栈求解迷宫问题
- 栈求解迷宫问题
- 栈 求解迷宫
- 用栈求解迷宫问题 ~~
- 栈实现迷宫求解问题
- 利用栈求解迷宫问题
- 栈-迷宫求解路径问题
- 迷宫求解(栈的应用)
- 迷宫求解(栈实现)
- 数据结构之栈迷宫求解
- 迷宫求解(栈实现)
- 迷宫求解
- 封装+继承+多态-零星知识点
- AVL树的插入算法
- 使用从源码编译的SITL测试dronekit代码
- java提高篇之理解java的三大特性——多态
- 重拾C语言-函数多文件定义
- 链栈求解迷宫
- 设计模式复习、实践和总结(一)
- C++程序员学Java系列之十二:一维数组定义,初始化,遍历,最值及异常
- HDU 1166 敌兵布阵 线段树
- LeetCode 76. Minimum Window Substring
- 模板实现动态顺序表(含容量检测函数的详细讲解)
- SQL-数据库连接与数据传输笔记
- Install System Workbench for OpenSTM32
- 泛型