POJ3026(BFS + prim)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 10554 | Accepted: 3501 |
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
Output
Sample Input
2
6 5
#####
#A#A##
# # A#
#S ##
#####
7 7
#####
#AAA###
# A#
# S ###
# #
#AAA###
#####
Sample Output
8
11
题意:求每个字母彼此之间的距离,找到一条最短路径将所有字母相连。
思路:用BFS枚举每个字母之间的距离,再用prim求出最短的一条路径。
收获:了解了prim要初始化和1相连的边权。
这题还要再做一遍。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
using namespace std; const int INF=0x3f3f3f3f;
const double eps=1e-;
const double PI=acos(-1.0);
#define maxn 1000
struct Node
{
int x, y, dis;
};
Node st, et;
int vis[maxn][maxn];
char map1[maxn][maxn];
int vis2[maxn];
int node[maxn][maxn];
int edge[maxn][maxn];
int dis[maxn];
int pre[maxn];
int dx[] = {, , -, };
int dy[] = {, -, ,};
int sum, n, m;
void bfs(int i, int j)
{
memset(vis, , sizeof vis);
queue<Node> q;
Node st = {i, j, };
vis[i][j] = ;
q.push(st);
while(!q.empty())
{
Node t = q.front();
q.pop();
if(node[t.x][t.y])
edge[node[st.x][st.y]][node[t.x][t.y]] = t.dis;
for(int i = ; i < ; i++)
{
int x0 = t.x + dx[i];
int y0 = t.y + dy[i];
if(!vis[x0][y0] && map1[x0][y0] != '#' && x0>= && x0 < m && y0 >= && y0 < n)
{
vis[x0][y0] = ;
Node f = {x0, y0, t.dis+};
q.push(f);
}
}
} }
int low[maxn];
int Prim()
{
int s=,i,count=,prim_sum=,t;
bool flag[maxn]={false};
flag[s] = true;
for(i=; i<=sum; i++)
low[i] = ;
while(count < sum)
{
int min_dis = ;
for(i=; i<=sum; i++)
{
if(!flag[i] && low[i]>edge[s][i])
low[i] = edge[s][i];
if(!flag[i] && low[i]<min_dis)
{
min_dis = low[i];
t = i;
}
}
s = t; count++;
flag[s] = true;
prim_sum += min_dis;
}
return prim_sum;
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &n, &m);
char temp[];
gets(temp);
sum = ;
memset(node, , sizeof node);
memset(edge, , sizeof edge);
for(int i = ; i < m; i++)
{
gets(map1[i]);
for(int j = ; j < n; j++)
{
if(map1[i][j] == 'S' || map1[i][j] == 'A')
node[i][j] = ++sum;
}
}
for(int i = ; i < m; i++)
for(int j = ; j < n; j++)
if(node[i][j])
bfs(i, j);
printf("%d\n", Prim());
}
return ;
}
POJ3026(BFS + prim)的更多相关文章
- poj3026(bfs+prim)
The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. ...
- 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 Borg Maze(Prim)(BFS)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12729 Accepted: 4153 Descri ...
- [CSP-S模拟测试]:Star Way To Heaven(最小生成树Prim)
题目描述 小$w$伤心的走上了$Star\ way\ to\ heaven$. 到天堂的道路是一个笛卡尔坐标系上一个$n\times m$的长方形通道(顶点在$(0,0)$和$(n,m)$),小$w$ ...
- nyoj 21三个水杯(BFS + 栈)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...
- POJ3279 Catch That Cow(BFS)
本文来源于:http://blog.csdn.net/svitter 意甲冠军:给你一个数字n, 一个数字k.分别代表主人的位置和奶牛的位置,主任能够移动的方案有x+1, x-1, 2*x.求主人找到 ...
随机推荐
- js网页返回页面顶部的小方法
咳咳,在网页出现滚动条的时候,许多网站会在右下角出现一个图标,点击可以回到页面顶部 本文就记录下js实现代码: 1.在html页面body添加dom元素 <img src="toTop ...
- JAVA中的正则表达式--待续
1.关于“\”,在JAVA中的正则表达式中的不同: 在其他语言中"\\"表示为:我想要在正则表达式中插入一个普通的反斜杠: 在Java中“\\”表示为:我想要插入一个正则表达式反斜 ...
- jQuery 动画之 添加商品到购物车
前台页面 <link href="MyCar.css" rel="stylesheet" /> <script src="../jq ...
- mac下识别国产android手机
mac下识别国产android手机困扰了我很久,这几天总算在google帮助下找到了解决方法. 在~/.android/下找到adb_usb.ini,如果不存在则创建.通过“系统信息”查看到插入的an ...
- [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句
LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...
- [置顶] Android项目组织和代码重用
在Android应用开发过程中,只要涉及两个或以上人的开发,就需要考虑分工和代码的组织和重用问题. 代码重用有三种方式: 1.APK: 2.JAR:通过Libs/ 和Build path集成,缺点是不 ...
- maven报错cannot change version of project facet
用Eclipse创建Maven结构的web项目的时候选择了默认的catalog,由于这个catalog比较老,用的servlet还是2.3,而现在最少也是2.5,所以经常会出现问题,在Projecdt ...
- HTTP协议4之缓存--转
HTTP协议提供了非常强大的缓存机制, 了解这些缓存机制,对提高网站的性能非常有帮助. 缓存的概念 缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有ASP. ...
- css学习之color: window和color: currentColor
一.易被忽略的属性 color: currentColor color: window 看完之后感觉眼前一亮,有的我之前根本没有用过,甚至都不知道有color: currentColor这么个东西 ...
- 利用PHP/MYSQL实现的简易微型博客(转)
数据库:ly_php_base 表:ly_micro_blog(仅仅有一个表)字段:id,title,date,content,hits 文件: 文件 描述 default.php 默认主页.显示博文 ...