POJ 3984 迷宫问题(kuangbin带你飞 专题一:简单搜索)

来源:互联网 发布:安卓拍视频软件 编辑:程序博客网 时间:2024/05/11 05:09

题目范围5*5,dfs即可,因为要顺序输出经过的点,所以我们可以从终点搜到起点,然后根据递归的性质倒序输出,就变成从起点到终点的顺序了...

#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<queue>#include<iostream>using namespace std;int map[10][10],used[10][10];int flag,mini;int d[4][2]={1,0,-1,0,0,1,0,-1};bool ok(int x,int y){    if(x>=5||y>=5||x<0||y<0)        return 0;    if(used[x][y]||map[x][y]==1)        return 0;    return 1;}void dfs(int x,int y,int t){if(x==0&&y==0&&t==mini&&flag==1)//找到了上一次搜索的最短路径,准备输出{flag=2;printf("(0, 0)\n");return ;}    if(x==0&&y==0)//第一遍寻找最短路径    {        if(t<mini)mini=t;        return ;    }    for(int i=0;i<4;i++)    {        int dx=x+d[i][0];        int dy=y+d[i][1];        if(ok(dx,dy))        {            used[dx][dy]=1;            dfs(dx,dy,t+1);if(flag==2)//一步一步回来{printf("(%d, %d)\n",x,y);return ;}elseused[dx][dy]=0;        }    }}int main(){    for(int i=0;i<5;i++)    {        for(int j=0;j<5;j++)            scanf("%d",&map[i][j]);    }flag=0;mini=100;    dfs(4,4,0);//第一次找最短路flag=1;dfs(4,4,0);//第二次输出路径    return 0;}


0 0