问题链接: http://bailian.openjudge.cn/practice/4127/
#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct node{
int x, y;
int step;
}Node;
int maze[5][5];
bool inq[5][5] = {false};
int X[4] = {0, 0, 1, -1};
int Y[4] = {1, -1, 0, 0};
vector<node> path, tpath;
int mindepth = 25;
bool test(int x, int y){
if(x >= 5 || x < 0 || y >= 5 || y < 0)
return false;
if(maze[x][y] == 1 || inq[x][y] == true)
return false;
return true;
}
void DFS(int x, int y, int depth){
Node.x = x, Node.y = y;
tpath.push_back(Node);
if(x == 4 && y == 4)
{
if(depth < mindepth)
{
path = tpath;
mindepth = depth;
}
return;
}
for(int i = 0; i < 4; i++){
int newX = x + X[i];
int newY = y + Y[i];
if(test(newX, newY))
{
inq[x][y] = true;
DFS(newX, newY, depth + 1);
inq[x][y] = false;
}
}
}
int main(){
for(int i = 0; i < 5; i++)
for(int j = 0; j < 5; j++)
cin >> maze[i][j];
DFS(0, 0, 0);
for(int i = 0; i < path.size(); i++)
{
node a = path[i];
printf("(%d, %d)\n",a.x, a.y);
}
return 0;
}