zoukankan      html  css  js  c++  java
  • 2-5-7218:献给阿尔吉侬的花束

    描述

        阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。

        迷宫用一个R×C的字符矩阵来表示。字符S表示阿尔吉侬所在的位置,字符E表示奶酪所在的位置,字符#表示墙壁,字符.表示可以通行。阿尔吉侬在1个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。

    输入第一行是一个正整数T(1 <= T <= 10),表示一共有T组数据。
    每一组数据的第一行包含了两个用空格分开的正整数R和C(2 <= R, C <= 200),表示地图是一个R×C的矩阵。
    接下来的R行描述了地图的具体内容,每一行包含了C个字符。字符含义如题目描述中所述。保证有且仅有一个S和E。输出对于每一组数据,输出阿尔吉侬吃到奶酪的最少单位时间。若阿尔吉侬无法吃到奶酪,则输出“oop!”(只输出引号里面的内容,不输出引号)。每组数据的输出结果占一行。样例输入

    3
    3 4
    .S..
    ###.
    ..E.
    3 4
    .S..
    .E..
    ....
    3 4
    .S..
    ####
    ..E.

    样例输出

    5
    1
    oop!
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int t,r,c,i,j,xi,xj,si,sj,zi,zj,ans;
     6     int book[201][201],dep[40001];
     7     char m[201][201];
     8     int ni[4]={-1,0,1,0};
     9     int nj[4]={0,-1,0,1};
    10     int p[40001][2];
    11     scanf("%d",&t);
    12     while(t>0)
    13     {
    14         memset(m,0,sizeof(m));
    15         scanf("%d%d",&r,&c);
    16         for(i=0;i<=r-1;i++)
    17             scanf("%s",m[i]);
    18         memset(book,0,sizeof(book));
    19         memset(dep,0,sizeof(dep));
    20         for(i=0;i<=r-1;i++)
    21             for(j=0;j<=c-1;j++)
    22                 if(m[i][j]=='S')    {si=i;sj=j;book[i][j]=1;}
    23                 else
    24                 if(m[i][j]=='E')    {zi=i;zj=j;}
    25         int head=0,tail=0,k;
    26         p[head][0]=si;
    27         p[head][1]=sj;
    28         ans=-1;
    29         while(head<=tail)
    30         {
    31             if(p[head][0]==zi&&p[head][1]==zj)
    32             {
    33                 ans=dep[head];
    34                 break;
    35             }
    36             for(k=0;k<=3;k++)
    37             {
    38                 xi=p[head][0]+ni[k];
    39                 xj=p[head][1]+nj[k];
    40                 if(xi>=0&&xi<=r-1&&xj>=0&&xj<=c-1)
    41                     if(m[xi][xj]!='#'&&book[xi][xj]==0)
    42                     {
    43                         p[++tail][0]=xi;
    44                         p[tail][1]=xj;
    45                         book[xi][xj]=1;
    46                         dep[tail]=dep[head]+1;
    47                     }
    48             }
    49             head++;
    50         }
    51         if(ans==-1)    printf("oop!
    ");
    52         else    printf("%d
    ",ans);
    53         t--;
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/qianxuejin/p/6033251.html
Copyright © 2011-2022 走看看