题目链接: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. Maven编译出现“[ERROR] java.lang.OutOfMemoryError: Java heap space”

    Windows下添加环境变量MAVEN_OPTS的value为-Xms1024m -Xmx1024m -Xss1m Linux下可修改.profile或者.bash_profile文件,并做如下设置: ...

  2. 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

    2011年11月26日 ? Web服务器架构 ? 评论数 2 案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现 ...

  3. 如何构建日均千万PV Web站点(二) 之~缓存为王~

    随着网站业务的不断发展,用户的规模越来越大:介于中国无比蹩脚复杂的网路环境:南电信:北联通:中间竟然只用一条链路进行互联通信!有研究表明,网站访问延迟和用户流失率正相关,网站访问速度越慢,用户越容易失 ...

  4. flask操作mongo两种方式--ORM

    #manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...

  5. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)

    题目链接:http://www.codeforces.com/problemset/problem/281/A题意:将一个英文字母的首字母变成大写,然后输出.C++代码: #include <c ...

  6. 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)

    行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...

  7. jQuery的parseHTML方法

    // data html字符串    // context 如果指定了context,则碎片将在此范围内被创建,默认是document    // keepScripts 如果是true,则将有scr ...

  8. javascript学习之this

    转自:https://www.cnblogs.com/pssp/p/5216085.html 例子1:  function a(){ var user = "追梦子"; conso ...

  9. 题目1002:Grading(题目背景基于高考打分的简单判断)

    题目链接:http://ac.jobdu.com/problem.php?pid=1002 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  10. LeetCode 50 Pow(x, n) (实现幂运算)

    题目链接:https://leetcode.com/problems/powx-n/?tab=Description   Problem:实现幂运算即 pow(x,n)   设形式为pow(x,n)  ...