poj 3984- 迷宫问题

来源:互联网 发布:整点报时软件 编辑:程序博客网 时间:2024/05/22 16:55
#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;}

原创粉丝点击