• 6264:走出迷宫


    题目链接:http://noi.openjudge.cn/ch0205/6264/

    总时间限制: 1000ms 内存限制: 65536kB
    描述

    当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 
    假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

    输入
    第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
    接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
    输出
    输出从起点到出口最少需要走的步数。
    样例输入
    3 3
    S#T
    .#.
    ...
    样例输出
    6

    算法分析:典型的广搜。

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<queue>
     4 using namespace std;
     5 
     6 struct obj
     7 {
     8     int xx,yy,step;
     9 };
    10 
    11 int n,m;
    12 char map[102][102];
    13 queue<struct obj> q;
    14 struct obj S,T;
    15 
    16 int dx[4]={-1,0,1,0};//上右下左 
    17 int dy[4]={0,1,0,-1};
    18 void BFS();
    19 
    20 int main(int argc, char *argv[])
    21 {
    22     int i,j;
    23     scanf("%d%d",&n,&m);getchar();
    24     for(i=0;i<n;i++)
    25     {
    26         for(j=0;j<m;j++)
    27         {
    28             map[i][j]=getchar();
    29             if(map[i][j]=='S')
    30             { S.xx=i; S.yy=j; S.step=0;    }
    31             else if(map[i][j]=='T')
    32             { T.xx=i; T.yy=j; T.step=-1; map[i][j]='.'; }
    33         }
    34         getchar();
    35     }
    36     
    37     if(S.xx==T.xx&&S.yy==T.yy) printf("0
    ");
    38     else  BFS();
    39     printf("%d
    ",T.step);
    40     
    41     return 0;
    42 }
    43 
    44 void BFS()
    45 {
    46     int i,txx,tyy;
    47     struct obj temp;
    48     
    49     q.push(S);
    50     while(!q.empty())
    51     {
    52         for(i=0;i<4;i++)
    53         {
    54             txx=q.front().xx+dx[i];
    55             tyy=q.front().yy+dy[i];
    56             if(txx>=0&&txx<n&&tyy>=0&&tyy<m&&map[txx][tyy]=='.')
    57             {
    58                 temp.xx=txx;
    59                 temp.yy=tyy;
    60                 temp.step=q.front().step+1;
    61                 map[txx][tyy]='#';
    62                 q.push(temp);
    63                 if(temp.xx==T.xx&&temp.yy==T.yy)
    64                 {
    65                     T.step=temp.step;
    66                     return ;
    67                 }
    68             }
    69         }
    70         q.pop();
    71     }
    72 }
  • 相关阅读:
    Python之os模块
    Python之加密模块
    Python之random模块
    Python之操作MySQL数据库
    Python之操作Excel
    Jmeter之发送请求入参必须使用编码格式、Jmeter之发送Delete请求可能入参需要使用编码格式
    PAT B1008 数组元素循环右移问题 (20 分)
    PAT B1007 素数对猜想 (20 分)
    PAT B1006 换个格式输出整数 (15 分)
    PAT B1005 继续(3n+1)猜想 (25 分)
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/7267789.html
Copyright © 2020-2023  润新知