走迷宫

时间限制:1000 ms  |  内存限制:65535 KB
难度:5

描述
Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲。这天卡多又跑出来了,在SJTL游乐场玩个不停,坐完碰碰车,又玩滑滑梯,这时卡多又走入一个迷宫。整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度。

这个迷宫可以向上走,向下走,向右走,向左走,但是不能穿越对角线。走迷宫的取胜规则很有意思,看谁能更快地找到一条路径,其路径上单元格最大难度值与最小难度值之差是最小的。当然了,或许这样的路径不是最短路径。

机器人卡多现在在迷宫的左上角(第一行,第一列)而出口在迷宫的右下角(第N行,第N列)。

卡多很聪明,很快就找到了这样的一条路径。你能找到吗?

输入
有多组测试数据,以EOF为输入结束的标志
第一行: N 表示迷宫是N*N方阵 (2≤ N≤ 100)
接下来有N行, 每一行包含N个整数,用来表示每个单元格中难度 (0≤任意难度≤120)。
输出
输出为一个整数,表示路径上最高难度与和最低难度的差。
样例输入
5
1 1 3 6 8
1 2 2 5 5
4 4 0 3 3
8 0 2 3 4
4 3 0 2 1
样例输出
2

解题思路:dfs,(我的dfs方面实在太弱了,参考网上的题解:http://blog.csdn.net/fool_ran/article/details/44424649)

思路是:二分枚举差值+dfs

//二分+dfs大神代码:
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int a[105][105],n;
int vis[105][105];
int maxn,minn,flag=0;
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
void dfs(int x,int y,int l,int r)
{if(flag==1) return;if(a[x][y]>r||a[x][y]<l)//这个路径的难度小于最小难度或者大于最大难度return;if(x==n&&y==n)//找到路径{flag=1;return;}for(int i=0;i<4;i++){int sx,sy;sx=x+dir[i][0];sy=y+dir[i][1];if(vis[sx][sy]==0&&sx>=1&&sx<=n&&sy>=1&&sy<=n){vis[sx][sy]=1;dfs(sx,sy,l,r);}}
}
int ChaZhi(int d)
{for(int i=minn;i<=maxn-d;i++)//遍历这条路的最小值{flag=0;memset(vis,0,sizeof(vis));int l=i,r=i+d;vis[1][1]=1;dfs(1,1,l,r);if(flag==1)return 1;}return 0;
}
int main()
{while(scanf("%d",&n)!=EOF){maxn=-inf,minn=inf;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){scanf("%d",&a[i][j]);if(maxn<a[i][j])maxn=a[i][j];if(minn>a[i][j])minn=a[i][j];}int low=0,high=maxn-minn,mid;//二分查找枚举差值while(low<high){mid=(low+high)/2;if(ChaZhi(mid))high=mid;elselow=mid+1;}printf("%d\n",high);}
}

转载于:https://www.cnblogs.com/xunalove/p/6809124.html

D题 走迷宫相关推荐

  1. 编程题走迷宫_洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  2. 2017年蓝桥杯c++A组第一题走迷宫

    走迷宫 题目描述: X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间,R表 ...

  3. 编程题走迷宫_C++程序算法题----迷宫(一)

    题目: 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道.看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数 ...

  4. 编程题走迷宫_编程题——机器人走迷宫 (用C语言)

    /*迷宫由 N W S E 组成 踩到N向上走一格 踩到W 向左走一格 踩到S向下走一格 踩到E 向右走一格 输入迷宫行数 列数 不大于10 机器人初始列数(注意 这个列数是从1开始数的) 判断能否走 ...

  5. 编程题走迷宫_迷宫--小学生编程竞赛题目(两种解法,一种简单的推荐)

    迷宫是长方形的,有 n 行 m 列个格子.一共有 3 类格子,空地用字符'.' 表示,墙壁用'#'表示,陷阱用'*'表示. 特别地,迷宫中有两个特殊的格子:起点用'S'表示;终点用'E'表示. 起点和 ...

  6. 编程题走迷宫_编程题迷宫求解

    迷宫求解问题 摘 要:用矩阵表示迷宫,将矩阵表示的迷宫转换成无向图, 用邻接表存储.对无向图从入 口结点开始广度优先搜索, 用一个一维数组存储各个结点的前驱结点的编号, 通过出口结点 Vn 找到其前驱 ...

  7. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)

    刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java) https://www.lanqiao.cn/problems/234/learning/ http://lx.lanqia ...

  8. 华为机试二星题--机器人走迷宫

    题目 机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入. 机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不 ...

  9. 【华为OD机试真题 python】机器人走迷宫 【2022 Q4 | 200分】

    前言 <华为OD笔试真题 python> 专栏含华为OD机试真题.华为面试题.牛客网华为专栏真题. 如果您正在准备华为的面试,或者华为od的机会,有任何想了解的可以私信我进行交流.我会尽可 ...

最新文章

  1. 企业网络推广方案教网站优化新手更合理地处理过期页面
  2. 吴恩达《Machine Learning》精炼笔记 6:关于机器学习的建议
  3. 关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案
  4. FreeSql (三十二)Aop
  5. C语言,利用一维数组中选择法对成绩高低排序和输出对应的学号及利用顺序查找查找学生成绩
  6. ubuntu安装chrome及firefox
  7. .netcore 2.0 mysql_搭建连接MySql的三层架构的ASP.NetCore2.0的WebApi
  8. Eclipse 更新Android SDK后,新建项目出现appcompat_v7project的相关问题
  9. Oracle10g安装在RHEL AS 3
  10. freemarker 标签循环list 以及获取下标值
  11. 有约束最优化问题的相关讨论
  12. 外架小横杆外露长度规范要求_外架小横杆外露长度
  13. VMware虚拟机安装Linux教程(超详细)
  14. Android和iOS人才招聘出现拐点 低能人才泛滥
  15. 数据库时间相减_sql时间相减
  16. 桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker服务)
  17. ubuntu将主文件夹的文件夹中文名称改为英文
  18. 限流的抖音号怎么养?养号方法是什么?
  19. 《王者荣耀》还有什么比被鲁班炮死更憋屈的死法?
  20. 板内盘中孔设计狂飙,细密间距线路中招

热门文章

  1. SIP 通话三十秒自动挂断
  2. 鲁大师Q1季度电脑硬件报告:intel 12代酷睿笔记本霸榜,显卡小幅降价
  3. 你有一个程序员的男朋友
  4. 手把手带你学python—牛客网python 机器学习 信息熵的计算
  5. mysql5.7查询连续登录/连续签到天数
  6. 如何在VS Code中运行C或C++程序
  7. SAP MM批次管理(3)批次级别--大海
  8. 服务器维护 志愿填报时间顺延,西藏 | 因系统维护耽误考生填报,志愿填报截止时间顺延两日...
  9. sin72度用计算机怎么算,三角函数值
  10. 01_ACS550变频器RS485Modbus通信-通讯连接