Borg Maze POJ - 3026 (BFS + 最小生成树)
题意:
求把S和所有的A连贯起来所用的线的最短长度。。。
这道题。。不看discuss我能wa一辈子。。。
输入有坑。。。
然后,,,也没什么了。。。还有注意 一次bfs是可以求当前点到所有点最短距离的。。。
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> #include <cmath> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; const int maxn = 100010, INF = 0x7fffffff; int f[maxn], d[55][55]; int cnt, n, m; int dis[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; char str[55][55], temp[maxn]; struct node {int u, v, w; }Node[maxn];struct edge {int x, y; }Edge[maxn];void add(int u, int v, int w) {Node[cnt].u = u;Node[cnt].v = v;Node[cnt++].w = w; }void init() {for(int i=0; i<maxn; i++) f[i] = i;cnt = 0; }int cmp(node a, node b) {return a.w < b.w; }int find(int x) {// return f[x]==x?x:(f[x] = find(f[x]));if(f[x] == x) return x;int r = f[x];while(r != f[r]) r = f[r];int i = x, j;while(i!=r){j = f[i];f[i] = r;i = j;}return r; }void bfs(edge s) {queue<edge> Q;mem(d, 0);Q.push(s);d[s.x][s.y] = 1;while(!Q.empty()){s = Q.front(); Q.pop();for(int i=0; i<4; i++){edge t;t.x = s.x + dis[i][0];t.y = s.y + dis[i][1];if(t.x < 0 || t.x >= n || t.y < 0 || t.y >= m || d[t.x][t.y] || str[t.x][t.y] == '#') continue;d[t.x][t.y] = d[s.x][s.y] + 1;Q.push(t);}} }int main() {int T;scanf("%d",&T);while(T--){init();int ans = 0;scanf("%d%d",&m,&n);gets(temp);// getchar();for(int i=0; i<n; i++){gets(str[i]);for(int j=0; j<m; j++){if(str[i][j] == 'A' || str[i][j] == 'S')Edge[++ans].x = i, Edge[ans].y = j;}}for(int i=1; i<=ans; i++){bfs(Edge[i]);for(int j=i+1; j<=ans; j++)add(i, j, d[Edge[j].x][Edge[j].y] - 1);}sort(Node, Node+cnt, cmp);int sum = 0;for(int i=0; i<cnt; i++){int r = find(Node[i].u);int l = find(Node[i].v);if(r == l) continue;f[r] = l;sum += Node[i].w;}printf("%d\n",sum);}return 0; }
转载于:https://www.cnblogs.com/WTSRUVF/p/9278475.html
Borg Maze POJ - 3026 (BFS + 最小生成树)相关推荐
- POJ - 3026(BFS+最小生成树.krustal)
题目: 题目链接: http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total S ...
- (最小生成树) Borg Maze -- POJ -- 3026
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...
- poj 3026 BorgMaze 最小生成树Kruskal、Prim(Prim VS报错待解决
题意 以及 思路: 从S点有一伙人出发去消灭A点的敌人,在S点或者A点可以分裂成几个小队然后分别走,这样路径=总队路径+各个小队路径 问你怎样路径最短. 在一个y行 x列的迷宫中,有可行走的通路空格' ...
- J - Borg Maze
J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...
- 【POJ 3026】Borg Maze
[POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...
- Borg Maze (最小生成树+bfs)
Borg Maze 题目描述: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant ...
- Borg Maze最小生成树
Borg Maze 原题链接https://vjudge.net/contest/352170#problem/I 本题给出一个地图,以及各个点的位置,大概意思就是所有点全部链接的最短路径,使用bfs ...
- poj3206(bfs+最小生成树)
传送门:Borg Maze 题意:有一个迷宫,里面有一些外星人,外星人用字母A表示,#表示墙,不能走,空格可以走,从S点出发,在起点S和A处可以分叉走,问找到所有的外星人的最短路径是多少? 分析:分别 ...
- (POJ 3026) Borg Maze 最小生成树+bfs
题目链接:http://poj.org/problem?id=3026. DescriptionThe Borg is an immensely powerful race of enhanced h ...
最新文章
- java基础学习总结(一)
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
- 在单独的WAR组件中对SPA资源和API实现进行分区
- 图片视频预览开启和关闭脚本 Xp
- 机器视觉【基础】什么是机器视觉?
- python加载文件并显示文件内容到qtextedit上_如何在python中读取QTextedit?
- 字符串在Java中_字符和字符串在Java中的旅程
- LiteOS:剖析时间管理模块源代码
- C# 中类的成员有哪些?
- 【运动学】基于matlab斜抛物体水平射程+竖直射高【含Matlab源码 979期】
- 你不能忽视的HTML语言
- 海词词典android v3.1.2新版发布 英语学习必备工具,海词词典Android V3.1.2新版发布 英语学习必备工具...
- 深度学习--二值神经网络BNN基础概念学习总结+官方代码解析
- 标准贴片IC元件的焊接方法(热风枪)
- golang binding tag
- linux鼠标怎么取出来,浅析linux中鼠标数据读取
- 关于Spec的一些理解
- python基础之输入输出语法
- antd-design-pro实现多页签,切换页签保留缓存,keep-alive
- 让人眼花缭乱的视错觉,太酷炫了!
热门文章
- oracle plsql创建表空间,Oracle在PLSQL Developer上创建表空间和用户脚本 - 龙卷风的日志 - 网易博客...
- vue可缓存的单页面多标签页
- nvidia显卡linux 7.2,科学网—悲喜录:服务器 CentOS 7.2 安装Nvidia显卡驱动(64bit) - 袁伟的博文...
- .net5 程序 在docker 中运行
- layui数据表格格式化
- Tomcat启动时日志报 dcom.sun.manager.jmxremote 异常导致无法正常启动使用
- 计算机睡眠功能命令,windows睡眠命令怎么使用
- Word字体修改(罚抄,抄作业专用)
- mysql删除十天前数据脚本_前几天手工删除测试数据库并重建的脚本
- python request请求参数_使用python将请求的requests headers参数格式化方法