链接:poj 3026

题意:y行x列的迷宫中,#代表阻隔墙(不可走)。空格代表空位(可走)。S代表搜索起点(可走),A代表目的地(可走),如今要从S出发,每次可上下左右移动一格到可走的地方。求到达全部的A的路线总距离最小值

分析:能够先用bfs从上下左右四个方向将全部的A,S两两之间的最短距离,题目的目的是将S与全部的A连通,使得总距离最小,所以任选一点開始按最小生成树的算法做即可,并不是非要从S点開始

注:题目输入x,y后可能有非常多空格,能够用gets将多余的空格取走,开数组是尽量开大点。之前尽管开的比题目数据稍大,但一直错,改大就AC了、、、题目数据不忍直视

#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
const int dx[]={1,0,-1,0};
const int dy[]={0,1,0,-1};
int m,n,x,y,f[1050],num[1050][1050]; //之前都是105
struct point
{
int i,j;
}a[1050];
struct stu
{
int a,b,c;
}t[100500]; //之前开的10050
char s[100][100];
int cmp(struct stu x1,struct stu x2)
{
return x1.c<x2.c;
}
void bfs(int star)
{
int i,j,k,dis[100][100],v[100][100];
queue<struct point> q;
struct point d;
memset(dis,0,sizeof(dis));
memset(v,0,sizeof(v));
q.push(a[star]);
v[a[star].i][a[star].j]=1;
while(!q.empty()){
d=q.front();
q.pop();
i=d.i;
j=d.j;
if(s[i][j]=='A'||s[i][j]=='S'){
t[m].a=star;
t[m].b=num[i][j];
t[m++].c=dis[i][j];
}
for(k=0;k<4;k++)
{
d.i=i+dx[k];
d.j=j+dy[k];
if(d.i>=0&&d.i<y&&d.j>=0&&d.j<x&&!v[d.i][d.j]&&s[d.i][d.j]!='#')
{
q.push(d);
v[d.i][d.j]=1;
dis[d.i][d.j]=dis[i][j]+1;
}
}
}
}
int find(int r)
{
if(r!=f[r])
f[r]=find(f[r]);
return f[r];
}
int krus()
{
int i,k=0,sum=0,l,r;
for(i=1;i<m;i++){
l=find(t[i].a);
r=find(t[i].b);
if(l!=r){
sum+=t[i].c;
k++;
if(k==n-1)
break;
f[l]=r;
}
}
return sum;
}
int main()
{
int N,i,j,sum;
char c[55];
scanf("%d",&N);
while(N--){
scanf("%d%d",&x,&y);
gets(c); //将多余空格取走
n=1;
for(i=0;i<y;i++){
gets(s[i]);
for(j=0;j<x;j++)
if(s[i][j]=='A'||s[i][j]=='S'){
a[n].i=i; //存A或S的坐标
a[n].j=j;
num[i][j]=n++; //存点的序号
}
}
n--;
m=1;
for(i=1;i<=n;i++){
f[i]=i; //初始化父节点
bfs(i); //求以i为一个顶点的全部边的权值
}
sort(t+1,t+m,cmp);
sum=krus();
printf("%d\n",sum);
}
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

poj 3026 Borg Maze (bfs + 最小生成树)的更多相关文章

  1. POJ - 3026 Borg Maze bfs+最小生成树。

    http://poj.org/problem?id=3026 题意:给你一个迷宫,里面有 ‘S’起点,‘A’标记,‘#’墙壁,‘ ’空地.求从S出发,经过所有A所需要的最短路.你有一个特殊能力,当走到 ...

  2. poj 3026 Borg Maze (BFS + Prim)

    http://poj.org/problem?id=3026 Borg Maze Time Limit:1000MS     Memory Limit:65536KB     64bit IO For ...

  3. POJ - 3026 Borg Maze BFS加最小生成树

    Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...

  4. POJ 3026 Borg Maze (最小生成树)

    Borg Maze 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/I Description The Borg is an im ...

  5. poj 3026 Borg Maze(最小生成树+bfs)

    题目链接:http://poj.org/problem?id=3026 题意:题意就是从起点开始可以分成多组总权值就是各组经过的路程,每次到达一个‘A'点可以继续分组,但是在路上不能分组 于是就是明显 ...

  6. poj 3026 Borg Maze bfs建图+最小生成树

    题目说从S开始,在S或者A的地方可以分裂前进. 想一想后发现就是求一颗最小生成树. 首先bfs预处理得到每两点之间的距离,我的程序用map做了一个映射,将每个点的坐标映射到1-n上,这样建图比较方便. ...

  7. POJ 3026 Borg Maze bfs+Kruskal

    题目链接:http://poj.org/problem?id=3026 感觉英语比题目本身难,其实就是个最小生成树,不过要先bfs算出任意两点的权值. #include <stdio.h> ...

  8. POJ - 3026 Borg Maze(最小生成树)

    https://vjudge.net/problem/POJ-3026 题意 在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的 ...

  9. POJ 3026 Borg Maze【BFS+最小生成树】

    链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

随机推荐

  1. OCP-1Z0-051-名称解析-文章12称号

    12. You need to produce a report where each customer's credit limit has been incremented by $1000. I ...

  2. JAVA设计模式--辛格尔顿

    Singleton模式可以作为一种编程技术,让我们先从理论上说代码 单例模式三个关键点: 1).某个类仅仅能有一个实例 2).该类必须自行创建这个实例 3).该类必须自行向整个系统提供这个实例 应用场 ...

  3. unix pwd使用命令

    [语法]:     pwd [说明]:    此命令会显示当前的工作文件夹 []: pwd     这显示当前工作文件夹 版权声明:本文博主原创文章.博客,未经同意不得转载.

  4. SQL Server 2008性能故障排查(二)——CPU

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

  5. 修饰模式(Decorator结构化)C#简单的例子

    修饰模式(Decorator结构化)C#简单的例子 播放器的基本功能是移动.执行等.BaseAbility 新增功能:1.伤害技能harmAbility:2.阻碍技能BaulkAbility:3.辅助 ...

  6. SAP ABAP第一,两,三代出口型BADI实现 解释的概念

    BADI这是第三代用户出口型.让我们来看看如何实现的细节. 一个,用户出口的类型 1,第一代 sap提供了一个空的子程序代码.在这个过程分,用户可以添加自己的代码.为了控制自己的需求.这样的改进是需要 ...

  7. Putty设置自己主动两次登录

    有时你想登录到serverA,但serverA白名单,你刚刚从山寨机B登录了,所以每次你要登录到serverA.您必须先登录到山寨机B.然后登录到serverA. 我们能够用Putty的local p ...

  8. 于XAML导入命名空间的代码

    例如,下面的代码到指定的命名空间.不仅导入的命名空间,并且还为指定的命名空间前缀local.当然,你也可以指定一个前缀为另一个名称,这可以定义.导入后,市民可以在命名当前空间XAML使用代码.例如,在 ...

  9. oracle数据库全然恢复和不全然恢复以及运行用户管理辈分恢复

    比較全然恢复和不全然恢复: 一.全然恢复:将数据库恢复到当前最新状态,包含直至请求恢复时进行的全部已提交的数据更改 二.不全然恢复:将数据库恢复到请求恢复操作之前指定的过去时间点 一.全然恢复过程 以 ...

  10. 启示—地点IT高管20在职场心脏经(读书笔记6)

    启示--一个IT高管20在职场心脏经 第七章  关于销售 用"最"来形容公司的销售.能够用上若干的词汇: 最牛,最累,最精,最傻,最有钱,最贱,最能吹.最能装... 1.1  销售 ...