zoukankan      html  css  js  c++  java
  • 2.5-2727:仙岛求药

    描述少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由M×N个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。现在要求你来帮助他实现这个目标。
    下图 显示了一个迷阵的样例及李逍遥找到仙药的路线.

    输入输入有多组测试数据. 每组测试数据以两个非零整数 M 和 N 开始,两者均不大于20。M 表示迷阵行数, N 表示迷阵列数。接下来有 M 行, 每行包含N个字符,不同字符分别代表不同含义: 
    1) ‘@’:少年李逍遥所在的位置;
    2) ‘.’:可以安全通行的方格;
    3) ‘#’:有怪物的方格;
    4) ‘*’:仙药所在位置。
    当在一行中读入的是两个零时,表示输入结束。
    输出对于每组测试数据,分别输出一行,该行包含李逍遥找到仙药需要穿过的最少的方格数目(计数包括初始位置的方块)。如果他不可能找到仙药, 则输出 -1。样例输入

    8 8
    .@##...#
    #....#.#
    #.#.##..
    ..#.###.
    #.#...#.
    ..###.#.
    ...#.*..
    .#...###
    6 5
    .*.#.
    .#...
    ..##.
    .....
    .#...
    ....@
    9 6
    .#..#. 
    .#.*.# 
    .####. 
    ..#... 
    ..#... 
    ..#... 
    ..#... 
    #.@.## 
    .#..#. 
    0 0
    

    样例输出

    10
    8
    -1
     1 #include<stdio.h>
     2 #include<string.h>
     3 int ni[4]={0,1,0,-1};
     4 int nj[4]={1,0,-1,0};
     5 int qu[401][2],dep[500];
     6 char a[21][21];
     7 int book[21][21];
     8 int m,n,i,j,k,si,sj,xi,xj,qi,qj,zi,zj,bu=0,ans;
     9 int main()
    10 {
    11 /*    FILE *fin,*fout;
    12     fin=fopen("map.in","r");
    13     fout=fopen("answer.out","w");
    14 */    int star,s;
    15 //    fscanf(fin,"%d%d",&m,&n);
    16     scanf("%d%d",&m,&n);
    17     while(m!=0&&n!=0)
    18     {
    19         memset(book,0,sizeof(book));
    20         for(i=1;i<=m;i++)
    21             //fscanf(fin,"%s",a[i]);
    22             scanf("%s",a[i]);
    23         for(i=1;i<=m;i++)
    24             for(j=0;j<=n-1;j++)
    25             {
    26                 if(a[i][j]=='@')    {qi=i;qj=j;book[i][j]=1;}
    27                 if(a[i][j]=='*')    {zi=i;zj=j;}
    28             }
    29         star=0;s=0;ans=-1;
    30         memset(dep,0,sizeof(dep));
    31         memset(qu,0,sizeof(qu));
    32         qu[0][0]=qi;qu[0][1]=qj;
    33         while(star<=s)
    34         {
    35             xi=qu[star][0];
    36             xj=qu[star][1];
    37             if(xi==zi&&xj==zj)
    38             {
    39                 ans=dep[star];
    40                 break;
    41             }
    42             for(k=0;k<=3;k++)
    43             {
    44                 si=xi+ni[k];
    45                 sj=xj+nj[k];
    46                 if(si>=1&&si<=m&&sj>=0&&sj<=n-1)
    47                     if(a[si][sj]!='#'&&book[si][sj]!=1)
    48                     {
    49                         qu[++s][0]=si;
    50                         qu[s][1]=sj;
    51                         dep[s]=dep[star]+1;
    52                         book[si][sj]=1;
    53                     }
    54             }
    55             star++;
    56         }
    57         //fprintf(fout,"%d
    ",ans);
    58         printf("%d
    ",ans);
    59         //fscanf(fin,"%d%d",&m,&n);
    60         scanf("%d%d",&m,&n);
    61     }
    62 /*    fclose(fin);
    63     fclose(fout);
    64 */    return 0;
    65 }
  • 相关阅读:
    VR虚拟现实眼镜那些事
    C#使用MysqlBackup.Net 备份MySQL数据库
    AgileConfig服务端搭建
    IE浏览器,各版本的请求头信息
    搜索算法
    一个完整的信号采集系统项目开发流程
    Linux内核模块简介
    搭建wordpress开发环境
    AbstractRoutingDataSource+AOP+JNDI实现spring动态数据源
    Linux 挂载磁盘记录
  • 原文地址:https://www.cnblogs.com/qianxuejin/p/6011383.html
Copyright © 2011-2022 走看看