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 }
  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/qianxuejin/p/6033251.html
Copyright © 2011-2022 走看看