• 南阳理工 58 最少步数 (DFS)


    描述

    这有一个迷宫,有0~8行和0~8列:

     1,1,1,1,1,1,1,1,1
     1,0,0,1,0,0,1,0,1
     1,0,0,1,1,0,0,0,1
     1,0,1,0,1,1,0,1,1
     1,0,0,0,0,1,0,0,1
     1,1,0,1,0,1,0,0,1
     1,1,0,1,0,1,0,0,1
     1,1,0,1,0,0,0,0,1
     1,1,1,1,1,1,1,1,1

    0表示道路,1表示墙。

    现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?

    (注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)

     

    输入

    第一行输入一个整数n(0<n<=100),表示有n组测试数据;
    随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。

    输出

    输出最少走几步。

    样例输入

    2
    3 1  5 7
    3 1  6 7

    样例输出

    12
    11
     1 #include<cstdio>
     2 #define M 10000 
     3 int map[9][9]={
     4  1,1,1,1,1,1,1,1,1,
     5  1,0,0,1,0,0,1,0,1,
     6  1,0,0,1,1,0,0,0,1,
     7  1,0,1,0,1,1,0,1,1,
     8  1,0,0,0,0,1,0,0,1,
     9  1,1,0,1,0,1,0,0,1,
    10  1,1,0,1,0,1,0,0,1,
    11  1,1,0,1,0,0,0,0,1,
    12  1,1,1,1,1,1,1,1,1
    13  };
    14  int x,y,ex,ey,ans,i;
    15 int ax[4]={-1,1,0,0};  //四个方向对应x,y的变化
    16 int ay[4]={0,0,-1,1};
    17 void f(int x,int y,int c)
    18  {
    19      int nx,ny,i;
    20      if(x == ex && y == ey)
    21      {
    22          ans=c;
    23      }
    24      else
    25      {
    26          for(i = 0 ; i < 4 ; i++)
    27          {
    28              nx=x+ax[i];
    29              ny=y+ay[i];
    30              if(c+1 < ans && map[nx][ny] == 0)
    31              {
    32                  map[nx][ny]=1;
    33                  f(nx,ny,c+1);
    34                  map[nx][ny]=0;
    35              }
    36              
    37          }
    38      }
    39 }
    40 int main()
    41 {
    42     
    43     int t;
    44     scanf("%d",&t);
    45     while(t--)
    46     {
    47         int c=0;
    48         ans=M;
    49         scanf("%d %d %d %d",&x,&y,&ex,&ey);
    50         map[x][y]=1;
    51         f(x,y,c);
    52         printf("%d
    ",ans);
    53         map[x][y]=0;
    54     }
    55 }
    ——将来的你会感谢现在努力的自己。
  • 相关阅读:
    UVA 11987 几乎就是并查集= =
    UVALive 5908 更新一下线段相交模板
    【poor几何】UVALive 5908 更新一下线段相交模板
    【poor几何】UVALive 5908 更新一下线段相交模板
    UVALive 3634 熟悉一下STL
    UVALive 3634 熟悉一下STL
    UVALive 3634 熟悉一下STL
    hdu2665 主席树模板题
    hdu2665 主席树模板题
    迷宫问题 POJ
  • 原文地址:https://www.cnblogs.com/yexiaozi/p/5714011.html
Copyright © 2020-2023  润新知