Borg Maze---poj3026最小生成树+bfs
题目链接: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的更多相关文章
- poj 3026 Borg Maze(最小生成树+bfs)
题目链接:http://poj.org/problem?id=3026 题意:题意就是从起点开始可以分成多组总权值就是各组经过的路程,每次到达一个‘A'点可以继续分组,但是在路上不能分组 于是就是明显 ...
- POJ 3026 Borg Maze (最小生成树)
Borg Maze 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/I Description The Borg is an im ...
- 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...
- POJ 3026 Borg Maze 广搜(BFS)+最小生成树
题意:从S出发,去抓每一个A,求总路径最短长度.在S点和A点人可以分身成2人,不过一次只能让一个人走. 思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板. 一次性A了.不过觉得在判断 ...
- Borg Maze POJ - 3026 (BFS + 最小生成树)
题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...
- POJ - 3026 Borg Maze(最小生成树)
https://vjudge.net/problem/POJ-3026 题意 在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的 ...
- Borg Maze - poj 3026(BFS + Kruskal 算法)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9821 Accepted: 3283 Description The B ...
- POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- POJ 3026 Borg Maze(Prim+bfs求各点间距离)
题目链接:http://poj.org/problem?id=3026 题目大意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...
- J - Borg Maze
J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...
随机推荐
- java多线程例子(生成者和消费者)
Info.cs 商品 public class Info { boolean flag=false; private String name="张三"; private int a ...
- Android学习之Gallery
在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动.Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最 ...
- 【.netcore基础】MVC制器Controller依赖注入
废话少说,直接上代码 首先我们得有一个接口类和一个实现类,方便后面注入MVC里 接口类 public interface IWeatherProvider { List<WeatherForec ...
- 【Phalapi2.0】 如何使用 source 通过 header 传参数
做接口服务时候.有些场景会使用header 来传递参数. 查看官网文档说明 数据来源 source指定当前单个参数的数据来源,可以是post.get.cookie.server.request.hea ...
- kafka---->kafka的使用(一)
今天我们来学习一下kafka的简单的使用与配置.世上有可以挽回的和不可挽回的事,而时间经过就是一种不可挽回的事. kafka的安装配置 一.kafka的使用场景 活动跟踪:网站用户与前端应用程序发生交 ...
- linux 文件编码问题
iconv -f UTF- -t gb18030 file_input -o file_output 上述命令不一定有用. 大概了解下文件编码,和vim里面的编码情况. 1 字符编码基础知识 字符编码 ...
- LeetCode——Implement Trie (Prefix Tree)
Description: Implement a trie with insert, search, and startsWith methods. Note:You may assume that ...
- 2015.7.8js-05(简单日历)
今天做一个简单的小日历,12个月份,鼠标移动其中一个月份时添加高亮并显示本月的活动.其实同理与选项卡致.不过是内容存在js里 window.onload = function(){ var oMain ...
- 使用JSP的fmt标签实现国际化支持
使用JSP的fmt标签配置i18n国际化资源文件可以实现根据不同的地区和语言切换不同的显示. 具体做法如下: 1.在JSP页面中添加fmt标签的引用: <%@ taglib prefix=&qu ...
- WIN7开启wifi热点
1.首先,先确定自己的笔记本网卡支持“启动承载网络”的功能,使用管理员运行cmd命令.启用管理员运行CMD的方法Windows-所有程序-附件-运行(右键,以管理员身份运行)在弹出的CMD窗口里面敲击 ...