走迷宫
来源:互联网 发布:城觅倒闭知乎 编辑:程序博客网 时间:2024/05/01 07:47
走迷宫
时间限制:1000 ms | 内存限制:65535 KB
难度:5
- 描述
- Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲。这天卡多又跑出来了,在SJTL游乐场玩个不停,坐完碰碰车,又玩滑滑梯,这时卡多又走入一个迷宫。整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度。
这个迷宫可以向上走,向下走,向右走,向左走,但是不能穿越对角线。走迷宫的取胜规则很有意思,看谁能更快地找到一条路径,其路径上单元格最大难度值与最小难度值之差是最小的。当然了,或许这样的路径不是最短路径。
机器人卡多现在在迷宫的左上角(第一行,第一列)而出口在迷宫的右下角(第N行,第N列)。
卡多很聪明,很快就找到了这样的一条路径。你能找到吗?
- 输入
- 有多组测试数据,以EOF为输入结束的标志
第一行: N 表示迷宫是N*N方阵 (2≤ N≤ 100)
接下来有N行, 每一行包含N个整数,用来表示每个单元格中难度 (0≤任意难度≤120)。 - 输出
- 输出为一个整数,表示路径上最高难度与和最低难度的差。
- 样例输入
51 1 3 6 81 2 2 5 54 4 0 3 38 0 2 3 44 3 0 2 1
- 样例输出
2
二分加深搜,先二分每个值,再用深搜卡比是否可行
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;int n;const int MAX = 150;int map[MAX][MAX];bool vis[MAX][MAX];int nMax, nMin;int low, high;inline int max(int a, int b){return a > b ? a : b;}inline int min(int a, int b){return a > b ? b : a;}const int dx[4] = {0, 0, 1, -1};const int dy[4] = {1, -1, 0, 0};bool dfs(int x, int y){if(x == n && y == n)return true;for(int i = 0; i < 4; ++i){int tx = x + dx[i];int ty = y + dy[i];if(map[tx][ty] >= low && map[tx][ty] <= high && vis[tx][ty] == false){vis[tx][ty] = true;if(dfs(tx, ty))return true;}}return false;}bool f(int m){for(int i = nMin; i <= nMax - m; ++i){if(map[1][1] < i || map[1][1] > i + m)continue;if(map[n][n] < i || map[n][n] > i + m)continue;low = i;high = i + m;vis[1][1] = true;memset(vis, false, sizeof(vis));if(dfs(1, 1) == true)return true;}return false;}int main(void){while(~scanf("%d", &n)){nMax = -1;nMin = 999999;memset(map, -1, sizeof(map));for(int i = 1; i <= n; ++i){for(int j = 1; j <= n; ++j){scanf("%d", &map[i][j]);nMax = max(nMax, map[i][j]);nMin = min(nMin, map[i][j]);}}int x = 0, y = nMax - nMin;while(x < y){int mid = (x + y) / 2;if(f(mid) == true){y = mid;}else{x = mid + 1;}}printf("%d\n", y);}return 0;}
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- mvc4强类型绑定提交form不想刷新页面的处理
- HDU 4276 树形dp + 背包
- 第一个免杀花指令生成器--不简单的免杀工具(图)
- 第11周项目一
- Quake引擎十三年 历代作品回顾
- 走迷宫
- 简单图片数字验证码的识别
- 以json为中心的报表数据表示及js公式解析计算的应用
- web报表页面及json数据公式解析计算器
- jdk1.4与jdk1.5关于随机数生成的区别
- 计算最大公约数--调用函数
- TOMCAT5在WINDOWS下的系统服务相关的命令行
- windows任务计划和批处理脚本结合完成的一些简单功能
- windows批处理命令使用详解