poj3026(bfs+prim)
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
Source
代码
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int map[300][300],dis[300],vis[300];
char str[300][300];
int point[300][300];
int tvis[300][300],tdis[300][300];
struct node{
int x,y;
};
int m,n,ans;
int tnext[4][2]={1,0,0,1,-1,0,0,-1};
void bfs(int tx,int ty){
queue<node>q;
node next,res;
memset(tvis,0,sizeof(tvis));
memset(tdis,0,sizeof(tdis));
tvis[tx][ty]=1;
res.x=tx;
res.y=ty;
q.push(res);
while(!q.empty()){
res=q.front();
q.pop();
if(point[res.x][res.y]){
map[point[tx][ty]][point[res.x][res.y]]=tdis[res.x][res.y];
}
int xx,yy;
for(int k=0;k<4;k++){
next.x=xx=res.x+tnext[k][0];
next.y=yy=res.y+tnext[k][1];
if(xx>=1&&xx<=m&&yy>=1&&yy<=n&&!tvis[xx][yy]&&str[xx][yy]!='#'){
tvis[xx][yy]=1;
tdis[xx][yy]=tdis[res.x][res.y]+1;
q.push(next);
}
}
}
}
int prim(int u){
int sum=0;
for(int i=1;i<=ans;i++){
dis[i]=map[u][i];
}
vis[u]=1;
for(int ti=2;ti<=ans;ti++){
int tmin=2000000000;
int k;
for(int i=1;i<=ans;i++){
if(dis[i]<tmin&&!vis[i]){
tmin=dis[i];
k=i;
}
}
sum+=tmin;
vis[k]=1;
for(int j=1;j<=ans;j++){
if(dis[j]>map[k][j]&&!vis[j])
dis[j]=map[k][j];
}
}
return sum;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(point,0,sizeof(point));
memset(map,0,sizeof(map));
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(str,0,sizeof(str));
scanf("%d%d",&n,&m);
gets(str[0]);
ans=0;
for(int i=1;i<=m;i++){
gets(str[i]+1);
for(int j=1;j<=n;j++){
if(str[i][j]=='S'||str[i][j]=='A')
point[i][j]=++ans;
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(point[i][j])
bfs(i,j);
}
}
printf("%d\n",prim(1));
}
return 0;
}
poj3026(bfs+prim)的更多相关文章
- poj3026(bfs+prim)最小生成树
The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. ...
- POJ 3026 : Borg Maze(BFS + Prim)
http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- POJ 3026(BFS+prim)
http://poj.org/problem?id=3026 题意:任意两个字母可以连线,求把所有字母串联起来和最小. 很明显这就是一个最小生成树,不过这个题有毒.他的输入有问题.在输入m和N后面,可 ...
- J - Borg Maze - poj 3026(BFS+prim)
在一个迷宫里面需要把一些字母.也就是 ‘A’ 和 ‘B’连接起来,求出来最短的连接方式需要多长,也就是最小生成树,地图需要预处理一下,用BFS先求出来两点间的最短距离, *************** ...
- POJ3026(BFS + prim)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10554 Accepted: 3501 Descri ...
- POJ 3126 Prime Path(BFS算法)
思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...
- Cleaning Robot (bfs+dfs)
Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...
- [CSP-S模拟测试]:Star Way To Heaven(最小生成树Prim)
题目描述 小$w$伤心的走上了$Star\ way\ to\ heaven$. 到天堂的道路是一个笛卡尔坐标系上一个$n\times m$的长方形通道(顶点在$(0,0)$和$(n,m)$),小$w$ ...
- HDU 1026 Ignatius and the Princess I(BFS+优先队列)
Ignatius and the Princess I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
随机推荐
- mysql配置详解
mysql有以下几种日志: 错误日志: log-err 查询日志: log 慢查询日志: log-slow-queries 更新日志: log-update 二进制日志: ...
- 验证xml是否有效于.dtd文件
<html> <head> <script language="javascript"> <!-- //加载解析器对象 var xmldo ...
- grid-css
.fil-container { width: 100%; max-width: 75rem; margin-right: auto; margin-left: auto; padding-left: ...
- tomcat 配置
tomcat 安装完成之后,我们可以在器目录先看到有如下结构
- php 判断是否get传值的参数是否存在
if(is_array($_GET)&&count($_GET)>0)//先判断是否通过get传值了 { if(isset($_GET["id&qu ...
- ADHelper C#域用户操作(转)
using System; using System.Collections.Generic; using System.DirectoryServices; using System.Linq; u ...
- Java设计模式-访问者模式(Visitor)
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化.访问者模式适用于数据结构相对稳定算法又易变化的系统.因为访问者模式使得算法操作增加变得容易.若系统数据结构对象易于变化,经 ...
- 【ZOJ 3480】Duck Typing
题 题意 1.有t组数据,输入时每组数据之间空格隔开,输出时也要求空格隔开. 2.每组都是一行begin开始,一行end结束. 3.class ClassName[:Super] 表示声明一个类型,S ...
- Java获取各种常用时间方法大全
Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...
- 【poj1144】 Network
http://poj.org/problem?id=1144 (题目链接) 题意 求无向图的割点. Solution Tarjan求割点裸题.并不知道这道题的输入是什么意思,也不知道有什么意义= =, ...