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

Description

The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. The Borg collective is the term used to describe the group consciousness of the Borg civilization. Each Borg individual is linked to the collective by a sophisticated subspace network that insures each member is given constant supervision and guidance.

Your task is to help the Borg (yes, really) by developing a program
which helps the Borg to estimate the minimal cost of scanning a maze for
the assimilation of aliens hiding in the maze, by moving in north,
west, east, and south steps. The tricky thing is that the beginning of
the search is conducted by a large group of over 100 individuals.
Whenever an alien is assimilated, or at the beginning of the search, the
group may split in two or more groups (but their consciousness is still
collective.). The cost of searching a maze is definied as the total
distance covered by all the groups involved in the search together. That
is, if the original group walks five steps, then splits into two groups
each walking three steps, the total distance is 11=5+3+3.

Input

On
the first line of input there is one integer, N <= 50, giving the
number of test cases in the input. Each test case starts with a line
containg two integers x, y such that 1 <= x,y <= 50. After this, y
lines follow, each which x characters. For each character, a space ``
'' stands for an open space, a hash mark ``#'' stands for an obstructing
wall, the capital letter ``A'' stand for an alien, and the capital
letter ``S'' stands for the start of the search. The perimeter of the
maze is always closed, i.e., there is no way to get out from the
coordinate of the ``S''. At most 100 aliens are present in the maze, and
everyone is reachable.

Output

For every test case, output one line containing the minimal cost of a succesful search of the maze leaving no aliens alive.

Sample Input

2
6 5
#####
#A#A##
# # A#
#S ##
#####
7 7
#####
#AAA###
# A#
# S ###
# #
#AAA###
#####

Sample Output

8
11 题意:求输入图中'S'点到所有'A'点的最小距离。
题解:这个题出的很好,要把一幅图转换为另外一幅图,用BFS把每一个点到其余所有的点的距离全部求一遍,然后按照点的下标构造一副新的图。构造完后,用prim算法求最小生成树即可。
这个题的输入处理有点问题。。不能用getchar(),我是参考了别人的代码改成这样才AC
getchar()---------->char temp[51];
            gets(temp);
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
const int N = ;
const int INF = ;
char a[N][N];
bool vis[N][N];
int graph[N][N];
int dis[N][N];
int n,m,k;
struct Point
{
int x,y;
} p[N*];
void input(int &k)
{
for(int i=; i<n; i++){
gets(a[i]);
for(int j=; j<m; j++){
if(a[i][j]=='S'){
p[].x = i;
p[].y = j;
}
if(a[i][j]=='A'){
p[k].x =i;
p[k++].y =j;
}
}
}
for(int i=;i<k;i++){
for(int j=;j<k;j++) graph[i][j] = INF;
}
}
void BFS(Point start,int start1){
int dir[][] = {{,},{-,},{,},{,-}};
memset(vis,false,sizeof(vis));
memset(dis,,sizeof(dis));
queue<Point> q;
q.push(start);
vis[start.x][start.y] = true;
while(!q.empty()){
Point t = q.front();
q.pop();
for(int i=;i<;i++){
int x = t.x+dir[i][];
int y = t.y+dir[i][];
if(x<||x>=n||y<||y>=m||vis[x][y]||a[x][y]=='#') continue;
dis[x][y]= dis[t.x][t.y]+;
vis[x][y] = true;
Point p1;
p1.x = x,p1.y = y;
q.push(p1);
}
}
for(int i=;i<k;i++){
graph[start1][i] = dis[p[i].x][p[i].y];
}
return;
}
bool vis1[N*];
int low[N*];
int prim(int n,int pos){
memset(vis1,false,sizeof(vis1));
memset(low,,sizeof(low));
for(int i=;i<n;i++){
low[i] = graph[pos][i];
}
int cost = ;
vis1[pos] = true;
low[pos] = ;
for(int i=;i<n;i++){
int Min = INF;
for(int j=;j<n;j++){
if(!vis1[j]&&Min>low[j]){
pos = j;
Min = low[j];
}
}
cost += Min;
vis1[pos] = true;
for(int j=;j<n;j++){
if(!vis1[j]&&low[j]>graph[pos][j]) low[j] = graph[pos][j];
}
}
return cost;
}
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
scanf("%d%d",&m,&n);
char temp[];
gets(temp);
k=;
input(k);
for(int i=;i<k;i++) BFS(p[i],i);
printf("%d\n",prim(k,));
}
return ;
}

poj 3026(BFS+最小生成树)的更多相关文章

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

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

  2. poj 3026 bfs+prim Borg Maze

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9718   Accepted: 3263 Description The B ...

  3. Borg Maze - poj 3026(BFS + Kruskal 算法)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9821   Accepted: 3283 Description The B ...

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

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

  5. POJ - 3026 Borg Maze BFS加最小生成树

    Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...

  6. poj 3026 Borg Maze (BFS + Prim)

    http://poj.org/problem?id=3026 Borg Maze Time Limit:1000MS     Memory Limit:65536KB     64bit IO For ...

  7. 【POJ 3026】Borg Maze

    id=3026">[POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值 ...

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

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

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

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

随机推荐

  1. P3365 改造二叉树

    P3365 改造二叉树 链接 分析: 求出中序遍历后,然后使其变成上升子序列.过程:每个点减去坐标,然后nlogn求出最长不下降子序列,n-ans即答案. 做题时一直认为二叉树就是完全二叉树,然后一直 ...

  2. Centos7 grep命令简介

    grep 是一个最初用于 Unix 操作系统的命令行工具.在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本. grep 可根据提供的 ...

  3. 《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集

    2014.06.18 14:16 简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能.另外还有一个名字叫“disjoint set”,中文名叫不相交集合 ...

  4. HTTP - 请求头的具体含义

    当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看 ...

  5. selenium初识(二)——之webdriver API

    配置完的环境之后,我们先来写一个小脚本: # __Author__:"Jim_xie" from selenium import webdriver from time impor ...

  6. win10系统安装之GHOST还原(转+编辑)

    注意*:在以下操作中,你可能需要分区你的原来系统盘,如果是重装的话.现在我们使用SSD固态做系统盘盘,这个分区的话,点选mbr重新引导,以及对齐复选框. 如果前面过程都没问题,在安装过程中出现    ...

  7. Code Blocks中配置OpenGL方法

    关于在Code Blocks中配置OpenGL的方法,在网上一直没有找到实用的方法,后来在马龙师兄的帮助下终于配置成功了,现把配置过程记录如下. (1)下载codeblocks,最好是带mingw的版 ...

  8. [C++] 拓展属性

    inline函数 函数重载 占位参数和默认参数 /*__________________________________________________________________ 背景: C++ ...

  9. python pip install XXX出现报错问题

    重装Anacondas后,将pip 和python.exe路径加入到环境变量后直接在cmd窗口进行pip 操作,报错如下 报错内容为: pip is configured with locations ...

  10. React01

    目录 React-day01 入门知识 React介绍 官网 React开发环境初始化 SPA 脚手架初始化项目(方便,稳定)* 通过webpack进行初始化 配置镜像地址 开发工具配置 元素渲染 组 ...