题目链接:http://poj.org/problem?id=3026

题意:可以理解为给你一个地图上面有S和A的表示一个一个的点,#表示墙,所以需要我们用bfs来计算各点之间的距离;

b[i][j] = p;代表map[i][j]的位置的点的编号为p;

D[i][j] 代表编号为i和j的距离;

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std; #define N 105
#define INF 0xfffffff
int dir[][] = { {, }, {-, }, {, }, {, -} };
int D[N][N], n, m, vis[N], used[N][N],b[N][N], dist[N];
char map[N][N]; struct node
{
int x, y, step;
} a[N]; void bfs(int s, int x, int y)
{
memset(used, , sizeof(used));
node p,q;
queue<node>Q;
p.x = x;
p.y = y;
p.step = ;
Q.push(p);
used[x][y] = ;
while(Q.size())
{
p = Q.front();
Q.pop();
if(map[p.x][p.y] >= 'A' && map[p.x][p.y] <= 'Z')
D[s][ b[p.x][p.y] ] = p.step;
for(int i=; i<; i++)
{
q.x = p.x + dir[i][];
q.y = p.y + dir[i][];
if(q.x<m && q.x>= && q.y>= && q.y<n && used[q.x][q.y]!= && map[q.x][q.y] != '#')
{
used[q.x][q.y] = ;
q.step = p.step + ;
Q.push(q);
}
}
}
} int Prim(int cnt)
{
int ans=;
vis[] = ;
for(int i=; i<=cnt; i++)
dist[i] = D[][i];
for(int i=; i<=cnt; i++)
{
int Min = INF, index = -;
for(int j=; j<=cnt; j++)
if(vis[j]== && Min > dist[j])
{
Min = dist[j];
index = j;
}
if(index==-)break;
ans += Min;
vis[index] = ;
for(int j=; j<=cnt; j++)
{
if(vis[j] == && dist[j] > D[index][j])
dist[j] = D[index][j];
}
}
return ans;
} int main()
{
int T, ans;
scanf("%d", &T);
while(T--)
{
memset(a, , sizeof(a));
memset(vis, , sizeof(vis)); memset(map, , sizeof(map));
for(int i=; i<N; i++)
{
dist[i] = INF;
for(int j=; j<N; j++)
D[i][j] = INF;
D[i][i] = ;
} int cnt = ;
scanf("%d%d ", &n,&m);
for(int i=; i<m; i++)
{
gets(map[i]);
for(int j=; j<n; j++)
{
if(map[i][j] <= 'Z' && map[i][j] >= 'A')
b[i][j] = cnt, cnt++;
}
}
for(int i=; i<m; i++)
{
for(int j=; j<n; j++)
{
if(map[i][j] <= 'Z' && map[i][j] >= 'A')
bfs(b[i][j], i, j);
}
}
ans = Prim(cnt-);
printf("%d\n", ans);
}
return ;
}

Borg Maze---poj3026最小生成树+bfs的更多相关文章

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

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

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

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

  3. 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...

  4. POJ 3026 Borg Maze 广搜(BFS)+最小生成树

    题意:从S出发,去抓每一个A,求总路径最短长度.在S点和A点人可以分身成2人,不过一次只能让一个人走. 思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板. 一次性A了.不过觉得在判断 ...

  5. Borg Maze POJ - 3026 (BFS + 最小生成树)

    题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...

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

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

  7. Borg Maze - poj 3026(BFS + Kruskal 算法)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9821   Accepted: 3283 Description The B ...

  8. POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

  9. POJ 3026 Borg Maze(Prim+bfs求各点间距离)

    题目链接:http://poj.org/problem?id=3026 题目大意:在一个y行 x列的迷宫中,有可行走的通路空格’  ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...

  10. J - Borg Maze

    J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...

随机推荐

  1. 先安装VS2017再安装VS2015遇到的CMake问题

    先安装了VS2017,后来有需求安装VS2015,安装VS2015的时候遇到下图问题,但是控制面板里面看不到Microsoft Visual C++ 2015 Redistributable的项目 我 ...

  2. Yii 开发过程 tips

    1. 查看DAO 生成的sql 结果(类似TP的 getLastSql): $reto = $edb->createCommand($bsql); echo $reto->text; 2. ...

  3. Python学习(20):Python函数(4):关于函数式编程的内建函数

    转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filte ...

  4. liunx trac 邮件提示功能

    http://trac.edgewall.org/wiki/TracNotification官网上提供的方法.个人觉得不是清楚,不过还是有参考价值的.以下写下自己的添加过程,以作记录. 1.the [ ...

  5. C#访问MySQL数据库帮助类

    MySQL数据库访问帮助类 1.项目添加引用官方MySQL动态库MySql.Data.dll 下载地址:MySql.Data.dll(也可以到官网下载动态库)项目添加引用 这里有一个Mysql帮助类的 ...

  6. 从零开始学习Hadoop--第4章 序列化(转载)

    作者对序列化的描述浅显易懂!(https://www.douban.com/note/313096752/) 1. 序列化从头说 在面向对象程序设计中,类是个很重要的概念.所谓“类”,可以将它想像成建 ...

  7. Elasticsearch学习之head插件安装

    通过elasticseach自带的plugin命令 elasticsearch/bin/plugin -install mobz/elasticsearch-head 如下图:  2. zip包安装 ...

  8. Elasticsearch学习之快速入门案例

    1. document数据格式 面向文档的搜索分析引擎 (1)应用系统的数据结构都是面向对象的,复杂的(2)对象数据存储到数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得还原回对象格式,相 ...

  9. LeetCode 43 Multiply Strings(字符串相乘)

    题目链接: https://leetcode.com/problems/multiply-strings/?tab=Description     求解大数相乘问题   按照上图所示,进行嵌套循环计算 ...

  10. BZOJ3163&Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]

    3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 277[Submit][ ...