zoukankan      html  css  js  c++  java
  • 仙岛求药(一)

    试题描述

        少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由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 <iostream>
     2 
     3 using namespace std;
     4 int n,m,ans=66666666;
     5 char s[101][101];   //地图 
     6 bool d[101][101];   //判断当前位置走没走过 
     7 bool f=false;   //f记录最终是否找到解 
     8 int dfs(int a,int b,int c)   //c是最短路径 
     9 {
    10     if(a<1 || a>n || b<1 || b>m) return 0;   //出界 
    11     if(s[a][b]=='*') {f=true;ans=min(ans,c);} //到达终点 
    12     if(s[a][b]=='#' || d[a][b]==1) return 0;  //遇障或当前位置已走过 
    13     d[a][b]=1;   //标记为已走过 
    14     dfs(a+1,b,c+1);   //向四个方向搜索 
    15     dfs(a-1,b,c+1);
    16     dfs(a,b+1,c+1);
    17     dfs(a,b-1,c+1);
    18     d[a][b]=0;   //恢复未走过 
    19 }
    20 int main()
    21 {
    22     while(cin>>n>>m)   //输入要用cin不要用scanf,因为有空格 
    23     {
    24         if(n==0 && m==0) return 0;  //输入终点判断 
    25         int st1,st2;
    26         for(int i=1;i<=n;i++)
    27             for(int j=1;j<=m;j++) 
    28             {
    29                 cin>>s[i][j];
    30                 if(s[i][j]=='@') {st1=i;st2=j;}   //记录起点 
    31             }
    32         dfs(st1,st2,0);
    33         if(f==false) printf("-1
    ");
    34         else printf("%d
    ",ans);
    35         f=false;
    36     }
    37     //system("pause");
    38     return 0;
    39 }
    仙岛求药(一)

    心累不想解释,看注释好了

  • 相关阅读:
    Sql Server中暂停命令
    优化SQL Sever查询语句的几个要点
    SQL Server 常用日期查询语句
    Android开发环境配置
    java实验报告(实验一)
    java实验报告(实验二)
    学习java的一点体会
    [已解决]求助:vs2003用代码实现excel的设置
    关于webform信息提示框
    DataGrid按钮事件的触发
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5690842.html
Copyright © 2011-2022 走看看