#include <iostream>
#include <stack>
#include <vector>
#define M 5
#define N 5
bool found = false;
struct cell
{
int c;
int r;
cell()
{
c = 0;
r = 0;
}
};
std::vector<cell*> path;
int maze[M][N] = {
{0, 0, 0, 0, 0},
{1, 0, 1, 0, 1},
{0, 0, 1, 1, 1},
{0, 1, 0, 0, 0},
{0, 0, 0, 1, 0}
};
void printPath()
{
for(std::vector<cell*>::iterator it = path.begin(); it != path.end(); it++)
{
std::cout << "(" << (*it)->c << "," << (*it)->r << ")\n";
}
};
void pushCellToPath(int c, int r)
{
cell* cel = new cell;
cel->c = c;
cel->r = r;
path.push_back(cel);
};
void popCellFromPath()
{
path.pop_back();
};
int move[4][2] = {
{1, 0}, //right
{-1, 0}, //left
{0, 1}, //up
{0, -1}, //down
};
void dfs(int c, int r)
{
//Exit
if(!found)
{
if(c == M - 1 && r == N -1)
{
printPath();
found = true;
return;
}
if(c >= M || r >= N || c < 0 || r < 0)
return;
//wall
if(maze[c][r] == 1)
return;
//unvisited
else if(maze[c][r] == 0)
{
//do visit
maze[c][r] = 2;
pushCellToPath(c, r);
for(int i = 0; i < 4; i++)
{
dfs(c + move[i][0], r + move[i][1]);
}
if(!found)
{
popCellFromPath();
maze[c][r] = 0;
}
}
//visited
else if(maze[c][r] == 2)
{
return;
}
}
};
int main()
{
dfs(0, 0);
return 0;
}
迷宫问题[1] DFS 不保证最短路径
最新推荐文章于 2020-12-23 14:17:29 发布