//BacktrackingAlaorithm.h
#include <stdio.h>
//迷宫问题
#define ROW 5
#define COL 5
typedef enum{false,true}bool;
extern find;
void MazePuzzle(char maze[ROW][COL], int row, int col, int outrow, int outcol);
bool Judge(char maze[ROW][COL], int row,int col);
void MazePrint(char maze[ROW][COL]);
//BacktrackingAlaorithm.c
#include "BacktrackingAlaorithm.h"
//(row,col) 表示起点,(outrow,outcol)表示终点
bool Judge(char maze[ROW][COL], int row, int col)
{
return row >= 0 && row <= ROW - 1 && col >= 0 && col <= COL - 1 && maze[row][col] != '0' && maze[row][col] != 'Y';
}
void MazePuzzle(char maze[ROW][COL], int row, int col, int outrow, int outcol)
{
maze[row][col] = 'Y';// 将各个走过的区域标记为 Y
if (row == outrow && col == outcol)
{
find = true;
printf("成功:\n");
MazePrint(maze);
return;
}
//尝试向上移动
if (Judge(maze, row - 1, col))
{
MazePuzzle(maze, row - 1, col, outrow, outcol);
maze[row - 1][col] = '1';
}
//尝试向左移动
if (Judge(maze, row, col-1))
{
MazePuzzle(maze, row, col-1, outrow, outcol);
maze[row][col-1] = '1';
}
//尝试向下移动
if (Judge(maze, row+1, col))
{
MazePuzzle(maze, row+1, col, outrow, outcol);
maze[row+1][col] = '1';
}
//尝试向右移动
if (Judge(maze, row, col+1))
{
MazePuzzle(maze, row, col + 1, outrow, outcol);
maze[row][col + 1] = '1';
}
}
void MazePrint(char maze[ROW][COL])
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
printf("%c", maze[i][j]);
}
printf("\n");
}
}
//test.c
#include "BacktrackingAlaorithm.h"
bool find = false;
int main()
{
char maze[ROW][COL] = {
{'1','0','1','1','1'},
{'1','1','1','0','1'},
{'1','0','0','1','1'},
{'1','0','0','1','0'},
{'1','0','0','1','1'} };
MazePuzzle(maze, 0, 0, ROW-1, COL-1);
if (find == false)
printf("失败");
return 0;
}
回溯算法解决迷宫问题
最新推荐文章于 2024-07-19 13:59:11 发布