/************************************************************************/
/* 数据结构:栈应用:求解迷宫问题 */
/* 挑灯看剑-shuchangs@126.com 2010-10 */
/* 云歌国际(Cloud Singers International) www.cocoral.com */
/************************************************************************/
//上接版面 《数据结构:栈应用:求解迷宫问题2》
void printMzePath(Stack S, int (*mtx)[9], int m, int n)
{
Status StackLocate(Stack S, int x, int y, NodePointer rtnNode);
COUNT i, j;
Node N =
{
NULL, NULL, NULL
};
printf("矩阵信息:%d行,%d列!\n", m, n);
if (!StackIsEmpty(S))
{
for (i = 0; i < m; i++)
{
printf("row=%d ", i);
for (j = 0; j < n; j++)
{
if (StackLocate(S, i, j, &N))
printf(" %c ", '*');
else
printf(" %d ", *(*(mtx + i) + j));
}
printf("\n");
}
}
else
{
for (i = 0; i < m; i++)
{
printf("row=%d ", i);
for (j = 0; j < n; j++)
{
printf(" %d ", *(*(mtx + i) + j));
}
printf("\n");
}
}
}
Status StackLocate(Stack S, int x, int y, NodePointer rtnNode)
{
COUNT i = 0;
COUNT n = S.len;
NodePointer p = S.base;
Status status = ERROR;
for (i = 0; i < n; i++)
{
if (p->data.x == x && p->data.y == y)
{
rtnNode = p;
status = OK;
break;
}
else
{
p = p->next;
}
}
if (p == NULL)
{
status = ERROR;
}
return status;
}
运行测试结果如下:
矩阵信息:9行,9列!
row=0 0 0 0 0 0 0 0 0 0
row=1 0 * 1 0 1 1 0 1 0
row=2 0 1 1 0 1 1 0 1 0
row=3 0 1 1 1 1 0 1 1 0
row=4 0 1 0 0 0 1 1 1 0
row=5 0 1 1 0 0 1 0 1 0
row=6 0 1 0 1 1 1 0 1 0
row=7 0 1 1 1 1 0 0 1 0
row=8 0 0 0 0 0 0 0 0 0
迷宫求解结束!
栈长度:21
打印结点信息(栈底到栈顶):
[1] foot[1][1] = 1
[2] foot[1][1] = 1
[3] foot[1][2] = 1
[4] foot[2][2] = 1
[5] foot[3][2] = 1
[6] foot[3][1] = 1
[7] foot[4][1] = 1
[8] foot[5][1] = 1
[9] foot[6][1] = 1
[10] foot[7][1] = 1
[11] foot[7][2] = 1
[12] foot[7][3] = 1
[13] foot[7][4] = 1
[14] foot[6][4] = 1
[15] foot[6][5] = 1
[16] foot[5][5] = 1
[17] foot[4][5] = 1
[18] foot[4][6] = 1
[19] foot[4][7] = 1
[20] foot[5][7] = 1
[21] foot[6][7] = 1
矩阵信息:9行,9列!
row=0 0 0 0 0 0 0 0 0 0
row=1 0 * * 0 1 1 0 1 0
row=2 0 1 * 0 1 1 0 1 0
row=3 0 * * 1 1 0 1 1 0
row=4 0 * 0 0 0 * * * 0
row=5 0 * 1 0 0 * 0 * 0
row=6 0 * 0 1 * * 0 * 0
row=7 0 * * * * 0 0 1 0
row=8 0 0 0 0 0 0 0 0 0
Press any key to continue
分享到:
相关推荐
实验内容:迷宫问题 三.实验目的:掌握栈和队列的概念及工作原理,运用其原理完成实验题目中的内容。 四.实验要求:为了使学生更好的掌握与理解课堂上老师所讲的概念与原理,实验前每个学生要认真预习所做的实验...
使用栈结构完成迷宫求解算法演示,设计了GUI界面使算法演示更加直观
很好的一个迷宫求解程序。此程序用0和1来随机产生一个迷宫,然后用栈的基本操作来实现迷宫的求解。很适合用于数据结构栈应用的课程设计。
本程序根据栈的特点来模拟迷宫求解的方法,这种迷宫求解的方法应用了栈的基本特点,属于栈的最基本应用,本程序只做了简单路径的求解,没有做最短路径的求解。
《数据结构》-李春葆 实验报告-栈与队列的应用-求解迷宫路径问题
(2)然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2...
迷宫问题 数据结构 湖南大学
改算法值得自习体会 涉及到栈和队列的综合应用
迷宫求解——栈的简单应用 要熟练得掌握一种数据结构,要经过大量的练习,而将数据结构应用于实际用用中则是一种非常好的锻炼方式。 此次便是应用java来实现 迷宫求解 这个经典的程序设计问题。
栈和队列的应用 - 求解迷宫问题 栈和队列都是存放多个数据的容器,通常用于存放临时数据。如果先放入的数据先处理,则使用队列。如果后放入的数据先处理,则使用栈。在本章节中,我们将介绍如何使用队列来解决迷宫...
基本要求:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的...
求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若...因此,在求迷宫通路的算法中应用“栈”也就是自然而然的事了。
主要练习对栈的灵活应用,通过对迷宫可行路径的搜寻来实现对栈的应用
(2) 利用链表作为栈的存储结构,设计实现一个求解迷宫的非递归程序。 二、实验内容: 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条...
(2) 利用链表作为栈的存储结构,设计实现一个求解迷宫的非递归程序。 二、实验内容: 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从...
数据结构中,关于迷宫问题的源代码(C语言)。课程作业是解决迷宫求解的问题,从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。...
迷宫问题是栈应用的一个典型例子。求解过程可采用回溯法。回溯法是一种不断试探且及时纠正错误的搜索方法。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达新点,否则试探下一方向;...
有链表、栈的一些应用例子。多项式的相加、括号匹配的检验、以及迷宫求解
(2) 利用链表作为栈的存储结构,设计实现一个求解迷宫的非递归程序。 二、实验内容: 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条...