Stealing Harry Potter‘s Precious BFS+DFS
Powered by:NEFU AB_IN
Stealing Harry Potter’s Precious
题意:在n×mn×mn×m的网格中,′.′'.'′.′表示可以经过的房间,′#′'\#'′#′表示不可经过的房间,′@′'@'′@′代表起点,在可经过的房间中有KKK个房间存在宝藏,问是否可以拿到所有宝藏并输出最短路程?
知识点:BFS+DFS(全排列)
思路:
从KKK的数据范围来看,最多四个,说明可以暴力搜索所有的路径情况,一共4×3×2×1=244×3×2×1=244×3×2×1=24种情况,可以通过DFS全排列获得。
知道了路径,剩下的就可以交给BFS跑图了,最多四个点,再加上起点,用BFS分别求出他们两两的最短路径长度,在DFS时直接加和即可。如果发现存在两两不通的情况,则直接跳出。
/** @Description: https://blog.csdn.net/qq_45859188* @Author: NEFU AB_IN* @version: 1.0* @Date: 2021-03-08 20:28:04* @LastEditors: NEFU AB_IN* @LastEditTime: 2021-03-28 19:30:28*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ld long double
#define db double
#define all(x) (x).begin(),(x).end()
#define MP make_pair
#define PB emplace_back
#define SZ(X) ((int)(X).size())
#define mset(s, _) memset(s, _, sizeof(s))
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl "\n"
#define forn(i, l, r) for (int i = l; i <= r; i++)
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int INF = 0x3f3f3f3f;struct sa{int x;int y;int step;
};
char a[110][110];
int dir[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
int n, m;int bfs(int xt, int yt, int xd, int yd){queue <sa> q;q.push( (sa) {xt, yt, 0});int vj[110][110];mset(vj, 0);vj[xt][yt] = 1;while(!q.empty()){sa tmp = q.front();q.pop();if(tmp.x == xd && tmp.y == yd){return tmp.step;}forn(i, 0, 3){int xx = tmp.x + dir[i][0];int yy = tmp.y + dir[i][1];if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && a[xx][yy] == '.' && vj[xx][yy] == 0){q.push( (sa) {xx, yy, tmp.step + 1});vj[xx][yy] = 1;}}}return -1;
}int main()
{IOS;while(cin >> n && cin >> m){if(n == 0 && m == 0) break;int d[110][110];mset(d, 0);vector < pii > pos;pos.clear();forn(i, 1, n){forn(j, 1, m){cin >> a[i][j];if(a[i][j] == '@') pos.PB(MP(i, j)); //起点入}}int k, xx, yy;cin >> k;forn(i, 1, k){cin >> xx >> yy;pos.PB(MP(xx, yy));}int flag = 0;forn(i, 0, k){forn(j, i + 1, k){int dis = bfs(pos[i].first, pos[i].second, pos[j].first, pos[j].second);if(dis == -1){cout << -1 << endl;flag = 1;break;}d[i][j] = d[j][i] = dis;}if(flag) break;}if(flag) continue;int mn = INF;int ps[110];forn(i, 0, k) ps[i] = i;do{int sum = 0;forn(i, 0, k - 1){sum += d[ps[i]][ps[i + 1]];}mn = min(sum, mn);}while(next_permutation(ps + 1, ps + k + 1));cout << mn << endl;}return 0;
}
完结。
Stealing Harry Potter‘s Precious BFS+DFS相关推荐
- hdu4771 Stealing Harry Potter's Precious (状压+bfs)
Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...
- Stealing Harry Potter‘s Precious HDU - 4771
题意:给一个n*m的矩阵,小偷从@出发可以走".",墙是"#"不可走,之后又K个珠宝,并且给你这K个珠宝的坐标,问小偷最少要走多少步可以吧珠宝偷完,如果不能偷完 ...
- 【ICPC-212】hdu 4771 Stealing Harry Potter's Precious
点击打开链接 题意:题目给定一个n*m的地图,地图有一个起点标记为'@',还有'#'表示不能够走的,'.'表示可以走.给定k个点,问从起点开始把这k个点走过去的最小步数. 思路:题目k的最大为4,那么 ...
- hdu 4771 Stealing Harry Potter#39;s Precious(bfs)
题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...
- LeetCode 1034. 边框着色(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...
- 全局路径规划:图搜索算法介绍1(BFS/DFS)
对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...
- 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...
最新文章
- chrome使用 postwoman_Postman的情敌,Postwoman了解一下
- python学习手册翻译很差吗-为什么要翻译?值得坚持下去么?
- bzoj2067: [Poi2004]SZN
- 特征选择---文本分类:叉方统计量
- 需求用例分析之七:业务用例之小结
- 直播预告 | 后广告时代数据助力融合媒体用户收入增长
- angularJs自定义模块
- 互联网基础运维分工、职责和技能要求
- 如何远程访问***之easy ***
- goldendict下优质词典简介及安装
- 【渝粤教育】电大中专中药学基础 (2)作业 题库
- 一个记账易app开发
- python容易挂科吗_如何应付大学的python考试而不至于挂科?
- VS编写简单的网游客户端
- sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...
- NGR/R8-PEG-ICG,肿瘤新生血管靶向肽NGR/穿膜肽R8-聚乙二醇-吲哚菁绿
- 图机器学习——3.2 PageRank 算法问题改进与延伸
- middlebury立体匹配评估使用方法总结(二)——python版离线教程
- 黑帽SEO技术教程百度网盘收集
- 【数据结构】第六章:图(上)
热门文章
- 搜狗输入法linux版 rpm,wps for linux 不能使用搜狗输入法
- 常见知识库对比:DBpedia/Freebase/OpenCyc/Wikidata/YAGO3
- html 中图片显示不了,css中不显示图片怎么办
- 国内外优秀程序员的博客全在这了,请查收
- 懒惰的牛(差分) + 金发姑娘和 N 头牛(差分) + 贝茜放慢脚步(二路排序)(归并排序)
- 初中计算机操作题五环,第五课 电脑出算术题 课件
- 深入table之collapse
- 程序员夏天穿格子衫,那么冬天穿什么?
- android基带版本,Android - 基带版本为未知时自动隐藏
- 期货交易结算信息(期货结算系统)