题意:

求把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 + 最小生成树)相关推荐

  1. POJ - 3026(BFS+最小生成树.krustal)

    题目: 题目链接: http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  2. (最小生成树) Borg Maze -- POJ -- 3026

    链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...

  3. poj 3026 BorgMaze 最小生成树Kruskal、Prim(Prim VS报错待解决

    题意 以及 思路: 从S点有一伙人出发去消灭A点的敌人,在S点或者A点可以分裂成几个小队然后分别走,这样路径=总队路径+各个小队路径 问你怎样路径最短. 在一个y行 x列的迷宫中,有可行走的通路空格' ...

  4. J - Borg Maze

    J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...

  5. 【POJ 3026】Borg Maze

    [POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...

  6. Borg Maze (最小生成树+bfs)

    Borg Maze 题目描述: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant ...

  7. Borg Maze最小生成树

    Borg Maze 原题链接https://vjudge.net/contest/352170#problem/I 本题给出一个地图,以及各个点的位置,大概意思就是所有点全部链接的最短路径,使用bfs ...

  8. poj3206(bfs+最小生成树)

    传送门:Borg Maze 题意:有一个迷宫,里面有一些外星人,外星人用字母A表示,#表示墙,不能走,空格可以走,从S点出发,在起点S和A处可以分叉走,问找到所有的外星人的最短路径是多少? 分析:分别 ...

  9. (POJ 3026) Borg Maze 最小生成树+bfs

    题目链接:http://poj.org/problem?id=3026. DescriptionThe Borg is an immensely powerful race of enhanced h ...

最新文章

  1. java基础学习总结(一)
  2. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
  3. 在单独的WAR组件中对SPA资源和API实现进行分区
  4. 图片视频预览开启和关闭脚本 Xp
  5. 机器视觉【基础】什么是机器视觉?
  6. python加载文件并显示文件内容到qtextedit上_如何在python中读取QTextedit?
  7. 字符串在Java中_字符和字符串在Java中的旅程
  8. LiteOS:剖析时间管理模块源代码
  9. C# 中类的成员有哪些?
  10. 【运动学】基于matlab斜抛物体水平射程+竖直射高【含Matlab源码 979期】
  11. 你不能忽视的HTML语言
  12. 海词词典android v3.1.2新版发布 英语学习必备工具,海词词典Android V3.1.2新版发布 英语学习必备工具...
  13. 深度学习--二值神经网络BNN基础概念学习总结+官方代码解析
  14. 标准贴片IC元件的焊接方法(热风枪)
  15. golang binding tag
  16. linux鼠标怎么取出来,浅析linux中鼠标数据读取
  17. 关于Spec的一些理解
  18. python基础之输入输出语法
  19. antd-design-pro实现多页签,切换页签保留缓存,keep-alive
  20. 让人眼花缭乱的视错觉,太酷炫了!

热门文章

  1. oracle plsql创建表空间,Oracle在PLSQL Developer上创建表空间和用户脚本 - 龙卷风的日志 - 网易博客...
  2. vue可缓存的单页面多标签页
  3. nvidia显卡linux 7.2,科学网—悲喜录:服务器 CentOS 7.2 安装Nvidia显卡驱动(64bit) - 袁伟的博文...
  4. .net5 程序 在docker 中运行
  5. layui数据表格格式化
  6. Tomcat启动时日志报 dcom.sun.manager.jmxremote 异常导致无法正常启动使用
  7. 计算机睡眠功能命令,windows睡眠命令怎么使用
  8. Word字体修改(罚抄,抄作业专用)
  9. mysql删除十天前数据脚本_前几天手工删除测试数据库并重建的脚本
  10. python request请求参数_使用python将请求的requests headers参数格式化方法