POJ3026 Borg Maze(Prim)(BFS)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 12729 | Accepted: 4153 |
Description
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
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
Sample Input
2
6 5
#####
#A#A##
# # A#
#S ##
#####
7 7
#####
#AAA###
# A#
# S ###
# #
#AAA###
#####
Sample Output
8
11
【题意】在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的路径L连接所有字母,输出这条路径L的总长度。
【分析】一开始没懂题意,后来懂了,就是简单的BFS+Prim。但是WA了好几发,伤心至极,去看看Discuss。发现好多人都被坑了,输入法人x,y后面还有好多空格,必须提前gets掉。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include<functional>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int N=;
const int M=;
int n,m,t,kk,ii,cnt,edg[N][N],lowcost[N];
int d[][]= {,,,,-,,,-};
int vis[N][N];
int num[N][N];
char w[N][N];
struct man {
int x,y,step;
};
void bfs(man s) {
queue<man>q;
while(!q.empty())q.pop();
q.push(s);
vis[s.x][s.y]=;
while(!q.empty()) {
man t=q.front();
q.pop();
if(w[t.x][t.y]=='A'||w[t.x][t.y]=='S') {
int u=num[s.x][s.y];
int v=num[t.x][t.y];
edg[u][v]=edg[v][u]=t.step;
}
for(int l=; l<; l++) {
int xx=t.x+d[l][],yy=t.y+d[l][];
if(xx>=&&xx<n&&yy>=&&yy<m&&vis[xx][yy]==&&w[xx][yy]!='#') {
man k;
k.x=xx,k.y=yy;
k.step=t.step+;
q.push(k);
vis[xx][yy]=;
}
}
}
}
void Prim() {
for(int i=; i<cnt; i++) {
lowcost[i]=edg[ii][i];
}
lowcost[ii]=-;
int sum=;
for(int i=; i<cnt; i++) {
int minn=inf;
for(int j=; j<cnt; j++) {
if(lowcost[j]!=-&&lowcost[j]<minn) {
minn=lowcost[j];
kk=j;
}
}
sum+=minn;
lowcost[kk]=-;
for(int j=; j<cnt; j++) {
if(edg[j][kk]<lowcost[j]) {
lowcost[j]=edg[j][kk];
}
}
}
printf("%d\n",sum);
}
int main() {
scanf("%d",&t);
while(t--) {
memset(edg,,sizeof(edg));
memset(lowcost,,sizeof(lowcost));
scanf("%d%d",&m,&n);
char tmp[N];gets(tmp);//一定要有这个,这是这个题目最坑的地方
for(int i=; i<n; i++) {
gets(w[i]);
}
cnt=;
for(int i=; i<n; i++) {
for(int j=; j<m; j++) {
if(w[i][j]=='A'||w[i][j]=='S') {
num[i][j]=cnt++;
if(w[i][j]=='S') {
ii=cnt-;
}
}
}
}
for(int i=; i<n; i++) {
for(int j=; j<m; j++) {
if(w[i][j]=='A'||w[i][j]=='S') {
man s;
s.x=i;
s.y=j;
s.step=;
memset(vis,,sizeof(vis));
bfs(s);
}
}
}
Prim();
}
return ;
}
POJ3026 Borg Maze(Prim)(BFS)的更多相关文章
- POJ 3026 : Borg Maze(BFS + Prim)
http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- 快速切题 poj 3026 Borg Maze 最小生成树+bfs prim算法 难度:0
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8905 Accepted: 2969 Descrip ...
- POJ3026——Borg Maze(BFS+最小生成树)
Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta qua ...
- Borg Maze(MST & bfs)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9220 Accepted: 3087 Descrip ...
- POJ 3026 Borg Maze(bfs+最小生成树)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6634 Accepted: 2240 Descrip ...
- POJ 3026 --Borg Maze(bfs,最小生成树,英语题意题,卡格式)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16625 Accepted: 5383 Descri ...
- POJ3026 Borg Maze 2017-04-21 16:02 50人阅读 评论(0) 收藏
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14165 Accepted: 4619 Descri ...
- Borg Maze(BFS+MST)
Borg Maze http://poj.org/problem?id=3026 Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- POJ 3026 Borg Maze【BFS+最小生成树】
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
随机推荐
- [BZOJ1339] [Baltic2008] Mafia / 黑手党
Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价, 现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的 ...
- [bzoj4071] [Apio2015]巴邻旁之桥
Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 10000 ...
- [洛谷P2044][NOI2012]随机数生成器
题目大意:给你$m,a,c,X_0,n,g$,求$X_{n+1}=(a\cdot X_n+c) \bmod{m}$,最后输出对$g$取模 题解:矩阵快速幂+龟速乘,这里用了$long\;double$ ...
- linux kernel 关于RSS/RPS/RFS/XPS的介绍
Introduction============ This document describes a set of complementary techniques in the Linuxnetwo ...
- linq.js的用法
linq.js 详细介绍 linq.js 是一个 JavaScript 实现的 LINQ. 主要特性: 实现所有 .NET 4.0 的方法 complete lazy evaluation full ...
- Membership Service Providers (MSP)
https://blog.csdn.net/baidu_39649815/article/details/76468249 Membership service provider (MSP)是一个提供 ...
- Terminals Project
https://github.com/Terminals-Origin Terminals Project Terminals is a secure, multi tab terminal serv ...
- python最简单发送邮件
#!/usr/bin/env python #coding:utf8 #Author:lsp #Date:下午5:51:13 #Version:0.1 #Function: #导入smtplib和MI ...
- 【Atcoder】AGC 016 C - +/- Rectangle
[题意]给定大矩阵的边长H和W,给每格填数(<=|10^9|),要求大矩形总和为正数,而每个h*w的小矩形总和为负数,求构造方式. [算法]数学 [题解]结论题. ★当h|H&& ...
- bzoj 1011 近似估计
开始看这道题的时候没什么思路,后来忍不住看了题解,发现自己真是水啊... 自从学OI来第一次看到用约等的题 首先我们设w[i]为第i个星球的答案,g[i]为第i个星球受到1-g[i]个星球的引力 那么 ...