hdoj1242(dfs 剪枝 解法)
题意:拯救行动,天使r有多个朋友a(friends,在这里被坑了几次,没看清题意),天使被关在牢房里,等着朋友来拯救,求拯救天使的最短距离。
解法:如果不剪枝,200*200的地图会超时,可以以天使为起点进行dfs,记录到达map[x][y]的最小值、到达每个a的最小值。
#include <iostream> #include <cstring> #include <cstdio> using namespace std;const int M = 205; char map[M][M]; int minL[M][M]; //记录到达x,y的最小值,如果再次到达大于最小值,则说明没有必要走下去了 int minLtoR; int visited[M][M]; int n,m; //int step; int dire[4][2] = {{-1,0},{0,-1},{1,0},{0,1}}; void dfs(int v1,int v2,int step) {if(map[v1][v2] == 'a'){if (step < minLtoR){minLtoR = step; //记录到达a的最小值 }else return;}for (int i = 0; i < 4; i++){int x = v1+dire[i][0];int y = v2+dire[i][1];if (!visited[x][y] && map[x][y]!='#' && x < n && x >= 0 && y < m && y >= 0){if (step+1 > minL[x][y])continue; //没有必要再走下去了else minL[x][y] = step+1; //更新最小值visited[x][y] = 1;if (map[x][y] == 'x')dfs(x,y,step+2);else dfs(x,y,step+1);visited[x][y] = 0;}} } int main() {while (cin >> n >> m){int step = 0;minLtoR = 1000000;int x,y;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> map[i][j];visited[i][j] = 0;minL[i][j] = 1000000;if (map[i][j] == 'r'){x = i;y = j;}}}dfs(x,y,step);if (minLtoR == 1000000)cout << "Poor ANGEL has to stay in the prison all his life.\n";else cout << minLtoR << endl;}return 0; }
博客原创,转载请说明出处。
转载于:https://www.cnblogs.com/ediszhao/p/4741825.html
hdoj1242(dfs 剪枝 解法)相关推荐
- [DFS|剪枝] leetcode 22 括号生成
[DFS|剪枝] leetcode 22 括号生成 1.题目 题目链接 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合. 示例: 输入:n = 3 输出:[& ...
- poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)
Sum It Up Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Sub ...
- POJ2688状态压缩(可以+DFS剪枝)
题意: 给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路: 水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...
- poj2362 DFS+剪枝
题大致做法就是对所有小棒子长度求和sum,sum就是正方形的周长,sum/4就是边长side. 问题就转变为:这堆小棒子能否刚好组合成为4根长度均为side的大棒子 不难了解,小棒子的长度越长,其灵活 ...
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- 【HDU - 1518】Square (经典的dfs + 剪枝)
题干: Given a set of sticks of various lengths, is it possible to join them end-to-end to form a squar ...
- poj2248 DFS+剪枝 or BFS
传送门 2248:Addition Chains 描述 An addition chain for n is an integer sequence with the following four p ...
- 2020 ICPC 南京 H Harmonious Rectangle (DFS剪枝+思维)
题目链接H-Harmonious Rectangle_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) 题目描述 A vertex-colored rectangle is a rec ...
- DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山
DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_&l ...
最新文章
- Docker系列 一. CentOS上安装Docker
- 数据分析系列:绘制散点图(matplotlib)
- 自己整理的计算机视觉领域稍微容易中的期刊(第一版)
- 解决Error: Cannot find module 'node-sass'问题
- 首批唯一!阿里云视频直播服务获信通院首批唯一认证
- C#原型模式之深复制实现
- Html、CSS、JavaScript 实时效果在线编辑器 - 学习的好工具,算不算?!
- Python3 网络爬虫:下载小说的正确姿势
- 计算机打印中 进纸盘2,软件、计算机和打印机接口问题-HP.PDF
- 卢伟冰正式预告Redmi K30:首发双开孔全面屏+双模5G
- 深入理解java虚拟机章节_深入理解java虚拟机-第六章
- 一、在Linux下,Nginx初安装及简单配置
- Python星号表达式
- 单个产品出库扣减库存
- PMP学习笔记 零 启动
- java udp 接收16进制,java udp接收16进制乱码
- 二元logistic回归前的单因素分析
- 防止汽轮机严重超速的技术措施 22437
- 网络安全——社会工程学02
- VMware虚拟机怎么安装win7系统【图文】