zoukankan      html  css  js  c++  java
  • 1254:走出迷宫

    题目来源:http://ybt.ssoier.cn:8088/problem_show.php?pid=1254

    1254:走出迷宫


    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 2502     通过数: 1154 

    【题目描述】

    当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。

    假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

    【输入】

    第一行是两个整数n和m(1≤n,m≤100),表示迷宫的行数和列数。

    接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.’表示空地,‘#’表示墙,‘S’表示起点,‘T’表示出口。

    【输出】

    输出从起点到出口最少需要走的步数。

    【输入样例】

    3 3
    S#T
    .#.
    ...
    

    【输出样例】

    6

    解析:
    常规BFS。
    参考代码:
    写得不大好,见谅。
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 #define N 101
     7 int n,m;
     8 int a[N][N];
     9 int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
    10 struct node{
    11     int h,l;
    12     int step;
    13 }q[N*N*N];
    14 using namespace std;
    15 void bfs(int i,int j)
    16 {
    17     int head=0,tail=1;
    18     q[tail].step=0;q[tail].h=i;q[tail].l=j;
    19     a[i][j]=1;
    20     do
    21     {
    22         head++;
    23         int x=q[head].l;
    24         int y=q[head].h;
    25         int step=q[head].step;
    26         
    27         for(int i=0;i<4;i++)
    28         {
    29             int nx=x+dir[i][0];
    30             int ny=y+dir[i][1];
    31             if(a[ny][nx]==3)//到终点 
    32             {
    33                 printf("%d",step+1);
    34                 return;
    35             }
    36             if(nx>0&&nx<=m&&ny>0&&ny<=n&&a[ny][nx]!=1)
    37             {
    38                 tail++;
    39                 a[ny][nx]=1;
    40                 q[tail].l=nx;
    41                 q[tail].h=ny;
    42                 q[tail].step=step+1;
    43             }
    44         }
    45     }while(head<tail);
    46 }
    47 int main()
    48 {
    49     cin>>n>>m;
    50     char c;
    51     getchar();//这里贼坑 
    52     for(int i=1;i<=n;i++)
    53     {
    54         for(int j=1;j<=m;j++)//节省空间 
    55         {
    56             scanf("%c",&c);
    57             if(c=='S') a[i][j]=2;
    58             if(c=='T') a[i][j]=3;
    59             if(c=='#') a[i][j]=1;
    60             if(c=='.') a[i][j]=0;
    61         }
    62          getchar();//这里也是贼坑 
    63     }
    64     for(int i=1;i<=n;i++)
    65     {
    66         for(int j=1;j<=m;j++)
    67         {
    68             if(a[i][j]==2)//找到起点 
    69             {
    70                 bfs(i,j);
    71                 break;
    72             }
    73         }
    74     }
    75         
    76     return 0;
    77 }

    2019-04-18 19:39:34

  • 相关阅读:
    leetcode刷题笔记三十九 组合总和
    leetcode刷题笔记三十八 外观数列
    leetcode刷题笔记三十七 解数独
    leetcode刷题笔记三十六 有效的数独
    HTML5每日一练之input新增加的六种时间类型应用
    HTML5每日一练之input新增加的5种其他类型1种标签应用
    html5+css3中的background: -moz-linear-gradient 用法
    HTML5新标签解释及用法
    让IE浏览器支持CSS3圆角的方法
    纯CSS3实现的图片滑块程序,效果非常酷
  • 原文地址:https://www.cnblogs.com/DarkValkyrie/p/10731792.html
Copyright © 2011-2022 走看看