迷宫(利用栈)

版权声明:转载请注明文章出处 https://blog.csdn.net/swo_ows/article/details/83189843

一、思路

二、源代码

1、Maze.h(Stack.h参考博客中的栈)

#ifndef _MAZE__H_
#define _MAZE__H_

#include "Stack.h"

#define N 6

typedef struct Pos
{
	int _row;
	int _col;
}Pos;

int GetPath(int maze[N][N], int row, int col);
void PrintMaze(int maze[N][N]);

#endif

2、Maze.c

#include "Maze.h"

int GetPath(int maze[N][N], int row, int col)
{
	int n = 2, tmp = 0, x = row, y = col;
	maze[row][col] = n;
	Stack s;
	StackInit(&s, 36);
	StackPush(&s,  row,  col);
	while (StackEmpty(&s))
	{
		if ((row == 0 || row == N - 1 || col == 0 || col == N - 1) && row != x&&col != y)
			tmp = 1;
		if (maze[row - 1][col] == 1 || ((maze[row][col] + 1) < maze[row - 1][col]))
		{
			if (row - 1 != 0)
			{
				StackPush(&s, row - 1, col);
				maze[--row][col] = ++n;
			}
			else
			{
				StackPop(&s);
				row = StackTop(&s)._row;
				col = StackTop(&s)._col;
				--n;
			}
		}
		else if (maze[row][col + 1] == 1 || ((maze[row][col] + 1) < maze[row][col + 1]))
		{
			if (col + 1 != N)
			{
				StackPush(&s, row, col + 1);
				maze[row][++col] = ++n;
			}
			else
			{
				StackPop(&s);
				row = StackTop(&s)._row;
				col = StackTop(&s)._col;
				--n;
			}
		}
		else if (maze[row][col - 1] == 1 || ((maze[row][col] + 1) < maze[row][col - 1]))
		{
			if (col - 1 != 0)
			{
				StackPush(&s, row, col - 1);
				maze[row][--col] = ++n;
			}
			else
			{
				StackPop(&s);
				row = StackTop(&s)._row;
				col = StackTop(&s)._col;
				--n;
			}
		}
		else if (maze[row + 1][col] == 1 || ((maze[row][col] + 1) < maze[row + 1][col]))
		{
			if (row + 1 != N)
			{
				StackPush(&s, row + 1, col);
				maze[++row][col] = ++n;
			}
			else
			{
				StackPop(&s);
				row = StackTop(&s)._row;
				col = StackTop(&s)._col;
				--n;
			}
		}
		else
		{
			StackPop(&s);
			row = StackTop(&s)._row;
			col = StackTop(&s)._col;
			--n;
		}
	}
	return tmp;
}

void PrintMaze(int maze[N][N])
{
	assert(maze);
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			printf("%-3d", maze[i][j]);
		}
		printf("\n");
	}
}

3、写一个测试(test.c)让代码跑起来并加以验证

猜你喜欢

转载自blog.csdn.net/swo_ows/article/details/83189843
今日推荐