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相关推荐

  1. hdu4771 Stealing Harry Potter's Precious (状压+bfs)

    Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...

  2. Stealing Harry Potter‘s Precious HDU - 4771

    题意:给一个n*m的矩阵,小偷从@出发可以走".",墙是"#"不可走,之后又K个珠宝,并且给你这K个珠宝的坐标,问小偷最少要走多少步可以吧珠宝偷完,如果不能偷完 ...

  3. 【ICPC-212】hdu 4771 Stealing Harry Potter's Precious

    点击打开链接 题意:题目给定一个n*m的地图,地图有一个起点标记为'@',还有'#'表示不能够走的,'.'表示可以走.给定k个点,问从起点开始把这k个点走过去的最小步数. 思路:题目k的最大为4,那么 ...

  4. hdu 4771 Stealing Harry Potter#39;s Precious(bfs)

    题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...

  5. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  6. [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]

    [问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...

  7. LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...

  8. LeetCode 1034. 边框着色(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...

  9. 全局路径规划:图搜索算法介绍1(BFS/DFS)

    对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...

  10. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...

    java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...

最新文章

  1. chrome使用 postwoman_Postman的情敌,Postwoman了解一下
  2. python学习手册翻译很差吗-为什么要翻译?值得坚持下去么?
  3. bzoj2067: [Poi2004]SZN
  4. 特征选择---文本分类:叉方统计量
  5. 需求用例分析之七:业务用例之小结
  6. 直播预告 | 后广告时代数据助力融合媒体用户收入增长
  7. angularJs自定义模块
  8. 互联网基础运维分工、职责和技能要求
  9. 如何远程访问***之easy ***
  10. goldendict下优质词典简介及安装
  11. 【渝粤教育】电大中专中药学基础 (2)作业 题库
  12. 一个记账易app开发
  13. python容易挂科吗_如何应付大学的python考试而不至于挂科?
  14. VS编写简单的网游客户端
  15. sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...
  16. NGR/R8-PEG-ICG,肿瘤新生血管靶向肽NGR/穿膜肽R8-聚乙二醇-吲哚菁绿
  17. 图机器学习——3.2 PageRank 算法问题改进与延伸
  18. middlebury立体匹配评估使用方法总结(二)——python版离线教程
  19. 黑帽SEO技术教程百度网盘收集
  20. 【数据结构】第六章:图(上)

热门文章

  1. 搜狗输入法linux版 rpm,wps for linux 不能使用搜狗输入法
  2. 常见知识库对比:DBpedia/Freebase/OpenCyc/Wikidata/YAGO3
  3. html 中图片显示不了,css中不显示图片怎么办
  4. 国内外优秀程序员的博客全在这了,请查收
  5. 懒惰的牛(差分) + 金发姑娘和 N 头牛(差分) + 贝茜放慢脚步(二路排序)(归并排序)
  6. 初中计算机操作题五环,第五课 电脑出算术题 课件
  7. 深入table之collapse
  8. 程序员夏天穿格子衫,那么冬天穿什么?
  9. android基带版本,Android - 基带版本为未知时自动隐藏
  10. 期货交易结算信息(期货结算系统)