poj 3026 (最小生成树)
题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间。一条路径上的时间跟人数是无关的,只跟路径长度有关。
思路:刚开始人都在起点,当派一定人数去最近的外星人后,起点就变成两个了,然后从两个起点去最近的外星人,起点就变成三个了,,,,这就是最小生成树了。
include<stdio.h>
#include<math.h>
#include<queue>
#include<stdlib.h>
#include<string.h>
const int N=251;
const int inf=0x3fffffff;
using namespace std;
int num,f[N],n,m,k,map[51][51],dir[4][2]={0,1,0,-1,1,0,-1,0};
bool vis[51][51];
char cap[51][51];
struct edge
{
int st,ed,w;
}e[N*N];
struct node
{
int x,y;
}p[N];
void addedge(int x,int y,int w)
{
e[num].st=x;e[num].ed=y;e[num++].w=w;
}
int dis(int i,int j)
{
return abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y);
}
int cmp(void const *a,void const *b)
{
edge *c,*d;
c=(edge *)a;
d=(edge *)b;
return c->w-d->w;
}
int find(int a)
{
if(a!=f[a])
f[a]=find(f[a]);
return f[a];
}
void bfs(int u)
{
queue<edge>Q;
edge cur,next;
int i,j,x,y;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
map[i][j]=inf;
vis[i][j]=false;
}
map[p[u].x][p[u].y]=0;vis[p[u].x][p[u].y]=true;
cur.st=p[u].x;cur.ed=p[u].y,cur.w=0;
Q.push(cur);
while(!Q.empty())
{
cur=Q.front();
Q.pop();vis[cur.st][cur.ed]=false;
for(i=0;i<4;i++)
{
next.st=x=cur.st+dir[i][0];
next.ed=y=cur.ed+dir[i][1];
if(x>=0&&x<n&&y>=0&&y<m&&cap[x][y]!='#')
{
next.w=cur.w+1;
if(map[x][y]>next.w)
{
map[x][y]=next.w;
if(vis[x][y]==false)
{Q.push(next);vis[x][y]=true;}
}
}
}
}
for(i=1;i<k;i++)
{
if(i==u)continue;
addedge(u,i,map[p[i].x][p[i].y]);
} }
int main()
{
int i,j,t,sum,x,y;
char str[100],ch;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
ch=getchar();
while(ch!='\n')
ch=getchar();
k=1;num=0;sum=0;
for(i=0;i<n;i++)
{
gets(str);
for(j=0;j<m;j++)
{
cap[i][j]=str[j];
if(str[j]=='A'||str[j]=='S')
{p[k].x=i;p[k++].y=j;}
}
}
for(i=1;i<k;i++)
{f[i]=i;bfs(i);}
qsort(e,num,sizeof(e[0]),cmp);
for(i=0;i<num;i++)
{
x=find(e[i].st);
y=find(e[i].ed);
if(x==y)continue;
sum+=e[i].w;
f[x]=find(y);
}
printf("%d\n",sum);
}
return 0;
}
poj 3026 (最小生成树)的更多相关文章
- poj 3026 Borg Maze (bfs + 最小生成树)
		
链接:poj 3026 题意:y行x列的迷宫中,#代表阻隔墙(不可走).空格代表空位(可走).S代表搜索起点(可走),A代表目的地(可走),如今要从S出发,每次可上下左右移动一格到可走的地方.求到达全 ...
 - POJ - 3026 Borg Maze BFS加最小生成树
		
Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...
 - poj 3026 Borg Maze (BFS + Prim)
		
http://poj.org/problem?id=3026 Borg Maze Time Limit:1000MS Memory Limit:65536KB 64bit IO For ...
 - 【POJ 3026】Borg Maze
		
id=3026">[POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值 ...
 - (POJ 3026) Borg Maze    最小生成树+bfs
		
题目链接:http://poj.org/problem?id=3026. Description The Borg is an immensely powerful race of enhanced ...
 - poj 3026 Borg Maze (最小生成树+bfs)
		
有几个错误,调试了几个小时,样例过后 1Y. 题目:http://poj.org/problem?id=3026 题意:就是让求A们和S的最小生成树 先用bfs找每两点的距离,再建树.没剪枝 63MS ...
 - POJ 3026 Borg Maze【BFS+最小生成树】
		
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
 - poj 3026 Borg Maze(最小生成树+bfs)
		
题目链接:http://poj.org/problem?id=3026 题意:题意就是从起点开始可以分成多组总权值就是各组经过的路程,每次到达一个‘A'点可以继续分组,但是在路上不能分组 于是就是明显 ...
 - POJ 3026 Borg Maze(bfs+最小生成树)
		
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6634 Accepted: 2240 Descrip ...
 
随机推荐
- Unity屏幕射线碰撞
			
Layers层: 从Layers设置看来,最多支持32层. 图层的值开始依次 0^2,1^2, 2^2, 3^3 依次增加. 当摄像机Culling Mask属性 Nothing= –1 Eveni ...
 - 对数组元素进行排序的方法总结(利用C++)
			
首先,对数组元素进行排序方法总结为以下两类: 一.简单排序算法(时间复杂度O(n*n)) 1.插入排序 2.选择排序 3.交换排序,即冒泡排序 二.先进排序算法(时间复杂度O(n*logn)) 1.快 ...
 - 9年经验,总结SEO职业瓶颈
			
昨天与某集团的副总与部门总监沟通了一些关于SEO发展与瓶颈的问题,有很多感触,今天整理出来分享给大家.其实关于SEO瓶颈这个话题已经不是一年两年了,很多新人老人越来越困惑,9年历程一路风雨走来,希望能 ...
 - swiftTools
			
String+Exten.swift // // String+Exten.swift // swiftTest // // Created by napiao on 15/11/27. // Cop ...
 - SPOJ 130 - Rent your airplane and make money(dp+优化)
			
题意:有n列预定航班,从st时刻开始出发,飞行时间为d,花费为p,且同一时刻不能有两个航班,求最大的花费 对航班的开始时间(或结束时间)按升序排序,从后往前找到对应结束时间所在的航班位置(如按结束时间 ...
 - C# 热水器
			
需求分析:现在有一个烧水器假设水温升高到100度为开水请用设计程序模拟整个烧水的过程,打开热水器,当水温达到95度时报警器开始发出警报,水温达到100度时,断开热水器电源. 我们使用常规的思维去分析这 ...
 - 物理机与虚拟机IP互ping通,而互ping主机名不通
			
问题描述:虚拟机信息:VMware-workstation 10安装RHEL5.8操作系统.hostname:rhel201.com IP:192.168.1.201 物理机系统:windows 7主 ...
 - Java中使用webservice,简化开发(xfire的webservice)
			
首先,使用到的jar先导入项目中, xbean-spring-2.8.jar, wsdl4j-1.6.1.jar, commons-httpclient-3.0.jar, commons-codec- ...
 - css3的盒子模型布局
			
写在前面的话: css3盒子布局,可以更简单直观的均分页面某一个div,并且还可以达到均分后的每一个元素中的内容上下居中.左右居中,但是该模型对浏览器的版本有要求: { display: -webki ...
 - ADO.NET帮助类DBHelper
			
一. DBHelper帮助类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...