• HDUOJ 1728逃离迷宫dp剪枝


    #include <iostream>
    using namespace std;
    #define inf 0x3fffffff
    #define M 105
    //1、wan用于转弯数剪枝;2、step用于步数剪枝,就不用vis标记访问了
    int r, c, ex, ey, k, wan[M][M];
    char mapp[M][M];
    int x_move[4] = {-1, 0, 1, 0};
    int y_move[4] = {0, 1, 0, -1};
    bool flag;
    int times=0;
    /*
    void showmap(int x,int y)//用这个可以打印出来研究
    {
     int i,j;
     printf("**************%d**************** ",times);
     for (i = 0; i < r; i++)
     {
       for (j = 0; j < c; j++)
       printf("%c",i==x&j==y?'@':mapp[i][j]);
       printf(" ");
     }
     printf("当前位置x=%d,y=%d ",x+1,y+1);
     for (i = 0; i < r; i++)
     {
       for (j = 0; j < c; j++)
       if(wan[i][j]==inf)
       printf("N");
       else
       printf("%d",wan[i][j]);
       printf(" ");
     }
      times++;
    } */
    void dfs (int x, int y, int dir) //dir为当前方向
    {
        if (x == ex && y == ey)
        {
            if (wan[x][y] <= k)
                flag = true;
            return ;
        }
        //x !=ex && y != ey 说明必须至少再转一次弯,但是已经不能再转了
        if (x !=ex && y != ey && wan[x][y] == k)
            return ;
        if (wan[x][y] > k) //转弯数超过k不用往下走了
            return ;
        for (int i = 0; i < 4; i++)
        {
            int tx = x + x_move[i];
            int ty = y + y_move[i];
          //  showmap(tx,ty);
            if (tx < 0 || tx >= r || ty < 0 || ty >= c)
                continue;
      //转弯数相等不可剪掉,所以是wan[tx][ty] < wan[x][y]而不是wan[tx][ty] <= wan[x][y]
            if (mapp[tx][ty] == '*' || wan[tx][ty] < wan[x][y])
                continue;
            if (dir != -1 && i != dir && wan[tx][ty] < wan[x][y] + 1)
      /*如果下一步不是初始位置而且下一步要转弯而且下一步的转弯数还更小那就不走这步,同时避免了走回头路*/
                continue;
            wan[tx][ty] = wan[x][y];
            if (dir != -1 && i != dir)
                wan[tx][ty]++; //如果方向变了转弯+1
            dfs (tx, ty, i);
            if (flag)
                return ;
        }
    }

    int main()
    {//freopen("C:\Users\Sky\Desktop\1.in","r",stdin);
    //freopen("C:\Users\Sky\Desktop\1.out","w",stdout);
        int t, i, j, sx, sy; //sx, sy是起点
        scanf ("%d", &t);
        while (t--)
        {
            scanf ("%d%d", &r, &c);
            for (i = 0; i < r; i++)
                scanf ("%s", mapp[i]);
            scanf ("%d%d%d%d%d", &k, &sy, &sx, &ey, &ex);
            sx--, sy--, ex--, ey--;  //我从0开始编号,而题目是从1开始
            for (i = 0; i < r; i++)
                for (j = 0; j < c; j++)
                    wan[i][j] = inf; //初始化转弯数和步数为无穷大
       wan[sx][sy] = 0; //到达起点的转弯数
       flag = false;
       dfs (sx, sy, -1); //一开始可以走任意方向,所以设方向为-1
       if (flag)
        puts ("yes");
       else puts ("no");
        }
        return 0;
    }

    打印结果

    **************0****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=0,y=1
    0NNNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************1****************
    .@.**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=2
    0NNNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************2****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=0,y=2
    00NNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************3****************
    ..@**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=3
    00NNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************4****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=0,y=3
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************5****************
    ...@*
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=4
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************6****************
    ...**
    *.@*.
    .....
    .....
    *....
    当前位置x=2,y=3
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************7****************
    .@.**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=2
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************8****************
    ...**
    *@**.
    .....
    .....
    *....
    当前位置x=2,y=2
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************9****************
    @..**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=1
    000NN
    N1NNN
    NNNNN
    NNNNN
    NNNNN
    **************10****************
    ...**
    @.**.
    .....
    .....
    *....
    当前位置x=2,y=1
    000NN
    N1NNN
    NNNNN
    NNNNN
    NNNNN
    **************11****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=0
    000NN
    N1NNN
    NNNNN
    NNNNN
    NNNNN
    no
    **************12****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=0,y=1
    0NNNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************13****************
    .@.**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=2
    0NNNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************14****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=0,y=2
    00NNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************15****************
    ..@**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=3
    00NNN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************16****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=0,y=3
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************17****************
    ...@*
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=4
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************18****************
    ...**
    *.@*.
    .....
    .....
    *....
    当前位置x=2,y=3
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************19****************
    .@.**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=2
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************20****************
    ...**
    *@**.
    .....
    .....
    *....
    当前位置x=2,y=2
    000NN
    NNNNN
    NNNNN
    NNNNN
    NNNNN
    **************21****************
    .@.**
    *.**.
    .....
    .....
    *....
    当前位置x=1,y=2
    000NN
    N1NNN
    NNNNN
    NNNNN
    NNNNN
    **************22****************
    ...**
    *.@*.
    .....
    .....
    *....
    当前位置x=2,y=3
    000NN
    N1NNN
    NNNNN
    NNNNN
    NNNNN
    **************23****************
    ...**
    *.**.
    .@...
    .....
    *....
    当前位置x=3,y=2
    000NN
    N1NNN
    NNNNN
    NNNNN
    NNNNN
    **************24****************
    ...**
    *@**.
    .....
    .....
    *....
    当前位置x=2,y=2
    000NN
    N1NNN
    N1NNN
    NNNNN
    NNNNN
    **************25****************
    ...**
    *.**.
    ..@..
    .....
    *....
    当前位置x=3,y=3
    000NN
    N1NNN
    N1NNN
    NNNNN
    NNNNN
    **************26****************
    ...**
    *.@*.
    .....
    .....
    *....
    当前位置x=2,y=3
    000NN
    N1NNN
    N12NN
    NNNNN
    NNNNN
    **************27****************
    ...**
    *.**.
    ...@.
    .....
    *....
    当前位置x=3,y=4
    000NN
    N1NNN
    N12NN
    NNNNN
    NNNNN
    **************28****************
    ...**
    *.*@.
    .....
    .....
    *....
    当前位置x=2,y=4
    000NN
    N1NNN
    N122N
    NNNNN
    NNNNN
    **************29****************
    ...**
    *.**.
    ....@
    .....
    *....
    当前位置x=3,y=5
    000NN
    N1NNN
    N122N
    NNNNN
    NNNNN
    **************30****************
    ...**
    *.**@
    .....
    .....
    *....
    当前位置x=2,y=5
    000NN
    N1NNN
    N1222
    NNNNN
    NNNNN
    **************31****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=3,y=6
    000NN
    N1NN3
    N1222
    NNNNN
    NNNNN
    **************32****************
    ...**
    *.**.
    .....
    ....@
    *....
    当前位置x=4,y=5
    000NN
    N1NN3
    N1222
    NNNNN
    NNNNN
    **************33****************
    ...**
    *.**.
    ...@.
    .....
    *....
    当前位置x=3,y=4
    000NN
    N1NN3
    N1222
    NNNN3
    NNNNN
    **************34****************
    ...**
    *.**.
    .....
    ...@.
    *....
    当前位置x=4,y=4
    000NN
    N1NN3
    N1222
    NNNN3
    NNNNN
    **************35****************
    ...**
    *.**.
    ..@..
    .....
    *....
    当前位置x=3,y=3
    000NN
    N1NN3
    N1222
    NNN33
    NNNNN
    **************36****************
    ...**
    *.**.
    .....
    ..@..
    *....
    当前位置x=4,y=3
    000NN
    N1NN3
    N1222
    NNN33
    NNNNN
    **************37****************
    ...**
    *.**.
    .@...
    .....
    *....
    当前位置x=3,y=2
    000NN
    N1NN3
    N1222
    NN333
    NNNNN
    **************38****************
    ...**
    *.**.
    .....
    .@...
    *....
    当前位置x=4,y=2
    000NN
    N1NN3
    N1222
    NN333
    NNNNN
    **************39****************
    ...**
    *.**.
    .@...
    .....
    *....
    当前位置x=3,y=2
    000NN
    N1NN3
    N1222
    N1333
    NNNNN
    **************40****************
    ...**
    *.**.
    .....
    ..@..
    *....
    当前位置x=4,y=3
    000NN
    N1NN3
    N1222
    N1333
    NNNNN
    **************41****************
    ...**
    *.**.
    .....
    .....
    *@...
    当前位置x=5,y=2
    000NN
    N1NN3
    N1222
    N1233
    NNNNN
    **************42****************
    ...**
    *.**.
    .....
    .@...
    *....
    当前位置x=4,y=2
    000NN
    N1NN3
    N1222
    N1233
    N1NNN
    **************43****************
    ...**
    *.**.
    .....
    .....
    *.@..
    当前位置x=5,y=3
    000NN
    N1NN3
    N1222
    N1233
    N1NNN
    **************44****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=6,y=2
    000NN
    N1NN3
    N1222
    N1233
    N12NN
    **************45****************
    ...**
    *.**.
    .....
    .....
    @....
    当前位置x=5,y=1
    000NN
    N1NN3
    N1222
    N1233
    N12NN
    **************46****************
    ...**
    *.**.
    .....
    @....
    *....
    当前位置x=4,y=1
    000NN
    N1NN3
    N1222
    N1233
    N12NN
    **************47****************
    ...**
    *.**.
    @....
    .....
    *....
    当前位置x=3,y=1
    000NN
    N1NN3
    N1222
    21233
    N12NN
    **************48****************
    ...**
    *.**.
    .....
    .@...
    *....
    当前位置x=4,y=2
    000NN
    N1NN3
    31222
    21233
    N12NN
    **************49****************
    ...**
    *.**.
    .....
    .....
    @....
    当前位置x=5,y=1
    000NN
    N1NN3
    31222
    21233
    N12NN
    **************50****************
    ...**
    *.**.
    .....
    .....
    *....
    当前位置x=4,y=0
    000NN
    N1NN3
    31222
    21233
    N12NN
    **************51****************
    ...**
    *.**.
    @....
    .....
    *....
    当前位置x=3,y=1
    000NN
    N1NN3
    31222
    21233
    N12NN
    yes

  • 相关阅读:
    万亿级大数据平台的建设实践
    Java开发中的23种设计模式
    FileZilla更新服务器文件后浏览器没有刷新的一种常见情况
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    iOS9.2.1 App从AppStore上下载闪退问题
    iOS9.2.1 App从AppStore上下载闪退问题
    iOS9.2.1 App从AppStore上下载闪退问题
  • 原文地址:https://www.cnblogs.com/Skyxj/p/3182818.html
Copyright © 2020-2023  润新知