热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

帅气的HYC迷路了

描述有一天,我们帅气的HYC找到了一张藏宝图,这张图很神奇,只要你看它一眼,立马就会被传送到一个迷宫里,这个迷宫仅有一个出口.那么现在问题来啦,问你找到这个出口需要走多少步

 有一天, 我们帅气的HYC找到了一张藏宝图, 这张图很神奇, 只要你看它一眼, 立马就会被传送到一个迷宫里, 这个迷宫仅有一个出口.那么现在问题来啦, 问你找到这个出口需要走多少步?

    现在给出HYC在迷宫房中走的规则, HYC每走出一步, 都会优先向左走, 如果左边是墙, 那么他会向前走, 如果前边也是墙, 那么他就会向右走, 如果右边也是墙, 那么他只能选择后退了~~~~>_<~~~~

    另外, HYC也想知道如果不这样走, 他最少能走多少步能走出出口呢?

首先给出一个T (1 <= T <100) 代表T组测试数据 每组测试数据第一行为两个整数r 和 c (3 <= r,c <= 40) r代表这个迷宫有多少列,c代表这个迷宫有多少行. S表示入口, E表示出口, #表示墙不能走, .表示空白区域, 可以走. 题目保证给出的迷宫四周都是墙, 而且按照规则走总能找到出口, 且初始方向为向北走,快来帮帮他吧!

每组数据输出两个数, 第一个数表示按照规则走的步数, 第二个数表示走到出口最短需要多少步.

 复制
1
9 5
#########
#.#.#.#.#
S.......E
#.#.#.#.#
#########
17 9
好受伤又好激动,一个月了,终于自己独立的写好了一个搜索【泪奔】

  1. #include
  2. #include
  3. #include
  4. //左前右后
  5. int n, m, p, q;
  6. char a[45][45];
  7. int book[45][45];
  8. int judge(int x,int y) {
  9.     return (x >= 0 && x = 0 && y
  10. }
  11. int dfs(int x, int y, int dir, int step) {
  12.     //dir 0:左 1上 2右 3后
  13.     //              x-1,y
  14.     //   x,y-1      x,y      x,y+1
  15.     //              x+1,y


  16.     int tx, ty;
  17.     int next[4][2] = {{0,-1},{-1,0},{0,1},{1,0}};
  18.     for(int k = 0; k <4; k++) {
  19.         if(x == p && y == q) return (step + 1);
  20.         int ndir = (dir + k + 3) % 4;
  21.         tx = x + next[ndir][0];
  22.         ty = y + next[ndir][1];
  23.         if(!judge(tx,ty)) continue;
  24.         return dfs(tx,ty,ndir,step+1);
  25.     }
  26. }
  27. struct node {
  28.     int x;
  29.     int y;
  30.     int dir;
  31.     int step;
  32. }que[2500];
  33. int main()
  34. {
  35.     int T;
  36.     scanf("%d",&T);
  37.     while(T--) {
  38.         memset(a,0,sizeof(a));
  39.         int startx, starty;
  40.         scanf("%d%d",&m,&n);
  41.         for(int i = 0; i
  42.             getchar();
  43.             for(int j = 0; j
  44.                 a[i][j] = getchar();
  45.                 if(a[i][j] == 'S') {
  46.                     startx = i;
  47.                     starty = j;
  48.                 }
  49.                 if(a[i][j] == 'E') {
  50.                     p = i;
  51.                     q = j;
  52.                 }
  53.             }
  54.         }
  55.         int step = dfs(startx,starty,1,0);
  56.         printf("%d ",step);
  57.         /****************hualidefengexian*****************/
  58.         memset(que,0,sizeof(que));
  59.         memset(book,0,sizeof(book));
  60.         int head, tail;
  61.         head = tail = 1;
  62.         book[startx][starty] = 1;
  63.         que[tail].x = startx;
  64.         que[tail].y = starty;
  65.         que[tail].dir = 0;
  66.         que[tail].step = 0;
  67.         tail++;
  68.         int flag = 0;
  69.         int next[4][2] = {{0,-1},{-1,0},{0,1},{1,0}};
  70.         while(head
  71.             for(int k = 0; k <4; k++) {
  72.                 int ndir = (que[head].dir + k + 3) % 4;
  73.                 int tx = que[head].x + next[ndir][0];
  74.                 int ty = que[head].y + next[ndir][1];
  75.                 if(judge(tx,ty) && book[tx][ty] == 0) {
  76.                     book[tx][ty] = 1;
  77.                     que[tail].x = tx;
  78.                     que[tail].y = ty;
  79.                     que[tail].dir = ndir;
  80.                     que[tail].step = que[head].step + 1;
  81.                     tail++;
  82.                 }
  83.                 if(tx == p && ty == q) {
  84.                     flag = 1;
  85.                     break;
  86.                 }
  87.             }
  88.             if(flag == 1) break;
  89.             head++;
  90.         }
  91.         printf("%d\n",que[tail-1].step + 1);
  92.     }
  93.     return 0;
  94. }

推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本文介绍了如何在最新版本的Visual Studio Code中配置中文语言包,使用户能够更便捷地使用中文界面。文章详细描述了安装和配置步骤,并提供了相关补充说明。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 新冠肺炎疫情期间,各大银行积极利用手机银行平台,满足客户在金融与生活多方面的需求。线上服务不仅激活了防疫相关的民生场景,还推动了银行通过互联网思维进行获客、引流与经营。本文探讨了银行在找房、买菜、打卡、教育等领域的创新举措。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文将详细介绍在Windows 7环境下,检查U盘启动盘是否制作成功的多种方法,包括通过BIOS设置和使用模拟启动工具。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
喂╲偶稀飯妳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有