题目链接: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. ISO27001信息安全管理体系

    0x00 前言 初入甲方,刚开始接触的应该就是ISO27001信息安全管理体系,你拿到的应该就是一整套安全管理类的文档.在甲方,稍微有点规模的公司很注重制度和流程,岗位职责分工明细,那么这些安全管理制 ...

  2. jenkins构建的robot result结果不更新

    描述:构建的结果不进行更新,仍然显示以往的构建结果 定位原因:pybot 命令中生成的结果文件保存路径与构建后robot结果显示路径不一致所致 解决办法:修改二者的结果保存路径一致

  3. STL——仿函数(函数对象)

    一.仿函数(也叫函数对象)概观 仿函数的作用主要在哪里?从第6章可以看出,STL所提供的各种算法,往往有两个版本,其中一个版本表现出最常用(或最直观)的某种运算,第二个版本则表现出最泛化的演算流程,允 ...

  4. CoreData 多表 关联

    本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19 1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表 ...

  5. Java动态代理的实现机制

    一.概述 代理是一种设计模式,其目的是为其他对象提供一个代理以控制对某个对象的访问,代理类负责为委托类预处理消息,过滤消息并转发消息以及进行消息被委托类执行后的后续处理.为了保持行为的一致性,代理类和 ...

  6. 向Windows内核驱动传递用户层定义的事件Event,并响应内核层的通知

    完整的程序在下载:http://download.csdn.net/detail/dijkstar/7913249 用户层创建的事件Event是一个Handle句柄,和内核中的创建的内核模式下的KEV ...

  7. Win8交互UX——键盘交互

    设计用户可以通过硬件键盘.屏幕键盘或触摸键盘交互的 Windows 应用商店应用. 本主题介绍键盘交互的设计注意事项.有关实现键盘交互的信息,请参阅响应键盘输入. 键盘交互 键盘输入是 Windows ...

  8. java框架---->commonmark的使用(一)

    commonmark-java是一个Markdown 解析器,一个基于CommonMark规范解析和渲染Markdown文本的Java库.偶尔要回头看看,否则永远都在追寻,而不知道自己失去了什么. c ...

  9. JavaScript 浮点数陷阱及解法

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

  10. web前端面试题(一)

    1  选择题 1.1   默认情况下,使用P标记会形成什么效果() A.在文字P所在位置中加入8个空格 B.P后面的文字会变成粗体 C.开始新的一行 D.P后面的文字会变成斜体 答案: C 1.2   ...