链接: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. Java网络编程注意事项3

    如何使用POST请求和GET请求Web网站发送请求,下面的参考代码: import java.io.BufferedReader; import java.io.InputStream; import ...

  2. HDU 4896 Minimal Spanning Tree(矩阵高速功率)

    意甲冠军: 给你一幅这样子生成的图,求最小生成树的边权和. 思路:对于i >= 6的点连回去的5条边,打表知907^53 mod 2333333 = 1,所以x的循环节长度为54,所以9个点为一 ...

  3. Codeforces 338D GCD Table 中国剩余定理

    主题链接:点击打开链接 特定n*m矩阵,[i,j]分值为gcd(i,j) 给定一个k长的序列,问能否匹配上 矩阵的某一行的连续k个元素 思路: 我们要求出一个解(i,j) 使得 i<=n &am ...

  4. Node.js和PHP运行机制对比

    为什么要用node.js它又有什么优势呢?一个新的技术被大家喜爱那么它就必然有它的优势,那么下面我们就来简单把它和php做一个对比 1 . Node.js 他用的是JavaScript引擎,那么注定它 ...

  5. mysql大写和小写问题

    曾经做企业项目的时候,用的都是oracle数据库,在新公司项目用的是mysql,有关mysql大写和小写的问题 1   windows下默认mysql是不区分大写和小写的,要想让其支持大写和小写.更改 ...

  6. Python网络01 原始Python服务器

    原文:Python网络01 原始Python服务器 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人 ...

  7. oracle的分页查询碰到的一个小问题

    订单表.与订单信息表(多个订单信息列有同一个订单id) 查出全部订单以及其信息并依照订单分页 select * from( select a. * , (DENSE_RANK() OVER(ORDER ...

  8. 一个ajax的Post要求

    <1> $.post(url,[data],[callback],[type]) 第一个参数是地址,第二个参数是一个参数传递.第三个参数是一个回调函数.參数是请求返回数据的类型 //一个a ...

  9. 移动web点5像素的秘密(转)

    最近和一个朋友聊天,朋友吐露了工作上的一些不开心,说自己总是喜欢跟别人比较,活得比较累,这种感觉大部分人经历过,往往觉得是自己心态不好,其实不然,这是人性,此时应该快速摆脱这种状态,想到DOTA大9神 ...

  10. dede织梦背景经常使用标签

    一些非常实用的标签调用的方法 关键描写叙述调用标签: <meta name="keywords" content="{dede:field name='keywor ...