#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#define maxn 10 + 10
#define ll long long
#define INF 1000000000
#define FOR(i, a, b) for(int i = a; i < b; ++i)
using namespace std;
struct Point
{
int x, y;
} midans[maxn*maxn], finalans[maxn*maxn];
int g[maxn][maxn], len_min;
bool vis[maxn][maxn];
int n;
const int move[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
void dfs(int i, int j, int len)
{
if(i == n-1 && j == n-1)
{
if(len < len_min)
{
FOR(k, 0, len) finalans[k].x = midans[k].x, finalans[k].y = midans[k].y;
len_min = len;
}
return;
}
FOR(k, 0, 4)
{
int di = i + move[k][0];
int dj = j + move[k][1];
if(di < 0 || dj < 0 || di >= n || dj >= n) continue;
if(g[di][dj] == 0 && !vis[di][dj])
{
midans[len].x = di;
midans[len].y = dj;
vis[di][dj] = true;
dfs(di, dj, len+1);
vis[di][dj] = false;
}
}
return;
}
int main()
{
memset(vis, false, sizeof(vis));
len_min = INF;
n = 5;
FOR(i, 0, n) FOR(j, 0, n) scanf("%d", &g[i][j]);
midans[0].x = 0;
midans[0].y = 0;
vis[0][0] = true;
dfs(0, 0, 1);
//printf("Case %d:\n", ++kase);
//printf("%d\n", len_min);
FOR(i, 0, len_min) printf("(%d, %d)\n", finalans[i].x, finalans[i].y);
return 0;
}
poj 3984- 迷宫问题
最新推荐文章于 2022-11-30 17:26:01 发布