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 ...
随机推荐
- mybatis的mapper文件的大于号特殊符号使用
第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DA ...
- bzoj 1110 [POI2007]砝码Odw 贪心+进制转化
[POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 661 Solved: 366[Submit][Status][Disc ...
- JSON.parse() 和 JSON.stringify()使用
1.parse()是用于从一个字符串中解析出json对象 定义一个字符串:var str = '{"name":"superman","age&quo ...
- .NET的PE文件结构篇(转)
一.开篇 开篇我要讲述一个关于PE文件结构的文章,这篇文章动手能力比较强,希望大家能够动手进行操作,这边文章篇幅有可能会长一些,为了方便大家阅读我可以将其分为几个部分进行讲解,主要分为以下几个部分: ...
- PostgreSQL(Linux)安装、启动、停止、重启
If we don't already have PostgreSQL installed, we must install it. $ sudo apt-get install postgresql ...
- MyBatis的SQL语句映射文件详解(二)----增删改查
1.select语句 public List<User> findUser() { // TODO Auto-generated method stub List users= ( ...
- 【Foreign】石子游戏 [博弈论]
石子游戏 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output 输出T行,表示每组的答案. Sample Input 3 ...
- 关于EINTR错误的理解【转】
转自:http://www.xuebuyuan.com/1470645.html 最近在工作中遇到了EINTR错误,感到比较困惑,几番研究之后,颇有心得和收获,特记录如下,便于以后查询,也给有同样困惑 ...
- 关于preempt_enable 和 preempt_disable 【转】
转自:http://blog.chinaunix.net/uid-8478094-id-2031177.html 关于preempt_enable 和 preempt_disable 允许抢占和禁止抢 ...
- GUI自动化模块化实现方式
效率为王:脚本与数据的解耦 + Page Object模型 1.数据驱动:实现了“测试脚本和数据的解耦”,数据驱动测试的数据文件中不仅可以包含测试输入数据,还可以包含测试验证结果数据,甚至可以包含测试 ...