POJ3026 最小生成树
问题: POJ3026
分析:
采用BFS算出两两之间的距离,再用PRIM算法计算最小生成树。
AC代码:
//Memory: 220K Time: 32MS #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <queue> using namespace std; ; ; char maze[maxn][maxn]; int m[maxn][maxn]; int g[max_alien][max_alien]; int vis[maxn][maxn]; ]; ]; int alien; int test, x, y; ], sj[max_alien + ]; ][] = {{, }, {, -}, {, }, {-, }}; struct node { int i; int j; int d; void set(int ii, int jj) { i = ii; j = jj; d = ; } }n1, n2; queue<struct node> q; void bfs(int num, int i, int j) { memset(vis, , sizeof(vis)); int t = alien - num; while ( !q.empty() ) q.pop(); n1.set(i, j); q.push(n1); ){ n1 = q.front(); q.pop(); ; i < ; i++){ n2.], n1.j + step[i][]); /*if (n2.i < 0 || n2.j < 0 ||)*/ if (maze[n2.i][n2.j] == '#' || vis[n2.i][n2.j]) continue; vis[n2.i][n2.j] = ; n2.d = n1.d + ; if (m[n2.i][n2.j] > num){ t--; g[num][ m[n2.i][n2.j] ] = g[ m[n2.i][n2.j] ][num] = n2.d; } q.push(n2); } } } int prim() { memset(v, , sizeof(v)); v[] = ; ; ; i <= alien; i++) d[i] = g[][i]; ; i < alien; i++) { , ix; ; j <= alien; j++) { if ( !v[j] && d[j] < _min){ _min = d[j]; ix = j; } } v[ix] = ; ret += d[ix]; ; j <= alien; j++){ if (!v[j] && d[j] > g[ix][j]) d[j] = g[ix][j]; } } return ret; } int main() { scanf("%d", &test); while (test--){ memset(m, , sizeof(m)); scanf("%d%d", &x, &y); gets(maze[]); alien = ; ; i < y; i++) gets(maze[i]); ; i < y; i++){ ; j < x; j++){ if (maze[i][j] == 'S'){ si[] = i; sj[] = j; } else if (maze[i][j] == 'A') { m[i][j] = ++alien; si[alien] = i; sj[alien] = j; } } } memset(g, , sizeof(g)); ; i <= alien; i++){ bfs(i, si[i], sj[i]); } int ans = prim(); printf("%d\n", ans); } ; }
POJ3026 最小生成树的更多相关文章
- POJ-3026 Borg Maze---BFS预处理+最小生成树
题目链接: https://vjudge.net/problem/POJ-3026 题目大意: 在一个y行 x列的迷宫中,有可行走的通路空格' ',不可行走的墙'#',还有两种英文字母A和S,现在从S ...
- POJ-3026(图上的最小生成树+prim算法+gets函数使用)
Borg Maze POJ-3026 一开始看到这题是没有思路的,看了题解才知道和最小生成树有关系. 题目的意思是每次走到一个A或者S就可以分为多个部分继续进行搜索.这里就可以看出是从该点分出去的不同 ...
- POJ3026 Borg Maze(最小生成树)
题目链接. 题目大意: 任意两点(点表示字母)可以连线,求使所有点连通,且权值和最小. 分析: 第一感觉使3维的BFS.但写着写着,发现不对. 应当用最小生成树解法.把每个字母(即A,或S)看成一个结 ...
- POJ3026:Borg Maze (最小生成树)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18644 Accepted: 5990 题目链接:h ...
- POJ3026 Borg Maze(bfs求边+最小生成树)
Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of ...
- POJ3026——Borg Maze(BFS+最小生成树)
Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta qua ...
- poj3026(bfs+prim)最小生成树
The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. ...
- 最小生成树练习3(普里姆算法Prim)
风萧萧兮易水寒,壮士要去敲代码.本女子开学后再敲了.. poj1258 Agri-Net(最小生成树)水题. #include<cstdio> #include<cstring> ...
- POJ - 3026 Borg Maze(最小生成树)
https://vjudge.net/problem/POJ-3026 题意 在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的 ...
随机推荐
- [php] PHP创建指定目录和文件
前几天看到有人问PHP环境下如何创建文件到指定目录下,正好自己最近在学习,经过一翻测试,终于出结果了,贴出来与大家分享. 目录结构: 代码所在的文件wwwroot/mydir/test/test.ph ...
- django-filter 使用Filter来筛选你的数据
django-filter Django-filter is a generic, reusable application to alleviate writing some of the more ...
- 六度分离--hdu1869
六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Django-Rest-Framework 教程: 快速入门
本篇中, 我们会创建一个简单的API, 用来查看和编辑django默认的user和group数据. 1. 设置 我们创建django项目tutorial, 和app quickstart: # 创建新 ...
- scons构建自己的一个简单的程序
我在我的D盘下,新建一个文件夹,命名为try.在这个文件夹下新建两个文件,一个文件是test.c .里面的程序很简单: #include<stdio.h>#include<stdli ...
- redhat 5下源码安装nginx服务
首先确保机器中已安装 gcc c++,libtool等工具,保证可执行源码安装 A.为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Co ...
- IC封装图片认识(二):SOP&SOJ
SOP SOP-EIAJ-TYPE-II-14L SSOP SSOP-16L TSOP(Thin Small Outline Package) TSSOP(Thin Shrink Outline Pa ...
- (转载)Setup Factory 会话变量
本文转自http://www.cnblogs.com/lzjsky/archive/2010/11/18/1880440.html 方便今后查询 Session variables are speci ...
- 转:关于rename命令ubuntu下的用法
下面是我的遭遇:上午想批量改几个文件的名字,觉得mv在批量方面不够方便,百度到了rename这个命令,原谅我吧,我总是在百度不到结果时才去看google,以后还是少去百度的好国内很多贴子都在说linu ...
- bzoj2741(分块+可持久化Trie)
题意中文我就不说了 解析: 分块+可持久化Trie,先得到前缀异或值,插入到Trie中,然后分块,对每一块,处理出dp[i][j](i代表第几块,j代表第几个位置),dp[i][j]代表以第i块开始的 ...