传送门:Borg Maze

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

分析:分别bfs由S和所有A出发到其他点的距离,然后建好图进行最小生成树处理即可。

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 110
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
struct edge
{
int u,v,w;
edge() {}
edge(int u,int v,int w):u(u),v(v),w(w){}
bool operator<(const edge &a)const
{
return w<a.w;
}
} e[N*N];
struct node
{
int x,y,step;
node(){}
node(int x,int y,int step):x(x),y(y),step(step){}
};
int fa[N],tot,total;
char str[N][N];
int num[N][N],vis[N][N],n,m;
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
int MST(int n)
{
int ans=;
for(int i=;i<=n;i++)fa[i]=i;
sort(e,e+tot);
for(int i=; i<tot; i++)
{
int a=find(e[i].u);
int b=find(e[i].v);
if(a==b)continue;
fa[a]=b;
ans+=e[i].w;
}
return ans;
}
bool judge(int a,int b)
{
return a>=&&a<=n&&b>=&&b<=m&&str[a][b]!='#'&&!vis[a][b];
}
void bfs(int x,int y)
{
queue<node>que;
while(!que.empty())que.pop();
FILL(vis,);
vis[x][y]=;
que.push(node(x,y,));
while(!que.empty())
{
node now=que.front();que.pop();
for(int i=-;i<=;i++)
for(int j=-;j<=;j++)
{
if(i+j==||i==j)continue;
int a=now.x+i,b=now.y+j,step=now.step+;
if(judge(a,b))
{
if(str[a][b]=='A'||str[a][b]=='S')
{
e[tot++]=edge(num[x][y],num[a][b],step);
}
vis[a][b]=;
que.push(node(a,b,step));
}
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
gets(str[]);
for(int i=;i<=n;i++)
gets(str[i]);
total=;tot=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(str[i][j]=='A'||str[i][j]=='S')
{
num[i][j]=++total;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(str[i][j]=='A'||str[i][j]=='S')
{
bfs(i,j);
}
}
printf("%d\n",MST(total));
}
}

poj3206(bfs+最小生成树)的更多相关文章

  1. 【bzoj4242】水壶 BFS+最小生成树+倍增LCA

    题目描述 JOI君所居住的IOI市以一年四季都十分炎热著称. IOI市是一个被分成纵H*横W块区域的长方形,每个区域都是建筑物.原野.墙壁之一.建筑物的区域有P个,编号为1...P. JOI君只能进入 ...

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

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6634   Accepted: 2240 Descrip ...

  3. poj 3026 Borg Maze (bfs + 最小生成树)

    链接:poj 3026 题意:y行x列的迷宫中,#代表阻隔墙(不可走).空格代表空位(可走).S代表搜索起点(可走),A代表目的地(可走),如今要从S出发,每次可上下左右移动一格到可走的地方.求到达全 ...

  4. POJ 3026 Borg Maze【BFS+最小生成树】

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

  5. poj 3026(BFS+最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12032   Accepted: 3932 Descri ...

  6. LOJ #2876. 「JOISC 2014 Day2」水壶 BFS+最小生成树+倍增LCA

    非常好的一道图论问题. 显然,我们要求城市间的最小生成树,然后查询路径最大值. 然后我们有一个非常神的处理方法:进行多源 BFS,处理出每一个城市的管辖范围. 显然,如果两个城市的管辖范围没有交集的话 ...

  7. POJ 3026 Borg Maze 广搜(BFS)+最小生成树

    题意:从S出发,去抓每一个A,求总路径最短长度.在S点和A点人可以分身成2人,不过一次只能让一个人走. 思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板. 一次性A了.不过觉得在判断 ...

  8. POJ3026——Borg Maze(BFS+最小生成树)

    Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta qua ...

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

    题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...

随机推荐

  1. Hadoop MapReduce编程的一些个人理解

    首先要实现mapreduce就要重写两个函数,一个是map 还有一个是reduce map(key ,value) map函数有两个參数,一个是key,一个是value 假设你的输入类型是TextIn ...

  2. Oracle的序列

    Oracle的序列 序列介绍 序列是Oracle提供的用于产生一系列唯一数字的数据库对象. 使用序列能够实现自己主动产生主键值.序列也能够在很多用户并发环境中使用.为所实用户生成不反复的顺序数字,并且 ...

  3. 使用MVC模式开发一简单的销售额查询系统

    与上一篇比较,只改变了index.jsp文件中form的提交路径 <form action="ShowServlet" method="post"> ...

  4. 把VS2010的智能代码提示和注解从英文变成中文

    最近安装了个高级点的VS2010,起初还没留意.今天无意发现提示信息只能提示英文.....头大oooo. 我以为是个别现象,于是GG了下,发现有很多盆友都有这种. 记录下来了,以后省事儿: 访问MS的 ...

  5. 最长公共子序列python实现

    最长公共子序列是动态规划基本题目,以下依照动态规划基本步骤解出来. 1.找出最优解的性质,并刻划其结构特征 序列a共同拥有m个元素,序列b共同拥有n个元素,假设a[m-1]==b[n-1],那么a[: ...

  6. FreeLink开源呼叫中心设计思想

    上一篇大概说了国内外优秀的呼叫中心系统: 国内外优秀呼叫中心系统简单介绍 借鉴上述呼叫中心系统,我们的设计新一代呼叫中心例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY ...

  7. Flex上传文件

    前几天写了一篇jsp页面利用ajaxFileUpload上传文件.如今把flex上传页面也分享出来: 前台页面 <?xml version="1.0" encoding=&q ...

  8. Keepalived安装工具

    装keepalived前,要先检查主机上是否已经安装, ps -ef | grep keepalive 不检查的话.easy把前人装的东西覆盖掉,那么曾经弄的配置文件都没了比較麻烦. 下面都为root ...

  9. hadoop拷贝文件时 org.apache.hadoop.ipc.RemoteException异常的解决

    1.系统或hdfs是否有空间 2.datanode数是否正常 3.是否在safemode 4.防火墙关闭 5.配置方面 6.把NameNode的tmp文件清空,然后重新格式化NameNode

  10. J2EE SSH学习(二)安装Eclipse插件和第一个Eclipse项目

    (一)安装Eclipse插件 Eclipse有很多功能很强大的插件,我现在作为一个菜鸟只知道插件的功能通常都很牛叉实用或者很有趣,那么该怎么安装Eclipse插件呢? 我使用的是Eclipse 4.3 ...