问题: 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 最小生成树的更多相关文章

  1. POJ-3026 Borg Maze---BFS预处理+最小生成树

    题目链接: https://vjudge.net/problem/POJ-3026 题目大意: 在一个y行 x列的迷宫中,有可行走的通路空格' ',不可行走的墙'#',还有两种英文字母A和S,现在从S ...

  2. POJ-3026(图上的最小生成树+prim算法+gets函数使用)

    Borg Maze POJ-3026 一开始看到这题是没有思路的,看了题解才知道和最小生成树有关系. 题目的意思是每次走到一个A或者S就可以分为多个部分继续进行搜索.这里就可以看出是从该点分出去的不同 ...

  3. POJ3026 Borg Maze(最小生成树)

    题目链接. 题目大意: 任意两点(点表示字母)可以连线,求使所有点连通,且权值和最小. 分析: 第一感觉使3维的BFS.但写着写着,发现不对. 应当用最小生成树解法.把每个字母(即A,或S)看成一个结 ...

  4. POJ3026:Borg Maze (最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18644   Accepted: 5990 题目链接:h ...

  5. POJ3026 Borg Maze(bfs求边+最小生成树)

    Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of ...

  6. POJ3026——Borg Maze(BFS+最小生成树)

    Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta qua ...

  7. poj3026(bfs+prim)最小生成树

    The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. ...

  8. 最小生成树练习3(普里姆算法Prim)

    风萧萧兮易水寒,壮士要去敲代码.本女子开学后再敲了.. poj1258 Agri-Net(最小生成树)水题. #include<cstdio> #include<cstring> ...

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

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

随机推荐

  1. nginx添加第三方模块

    原已经安装好的nginx,现在需要添加一个未被编译安装的模块: nginx -V 可以查看原来编译时都带了哪些参数,看看nginx是哪个版本,去下载一个nginx的源码,解压 原来的参数:--pref ...

  2. 搬寝室(HDU 1421 DP)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  3. cocos2d安卓android长音效播放不完全

    是因为安卓限制了音效的内存,一般把mp3的比特率压缩一下.就可以搞定了.

  4. Keil "RECURSIVE CALL TO SEGMENT"彻底解决

    我们在做菜单程序或通过函数指针调用函数时,如果被调用的函数中有包含了常量字符串,那么经常会出现这样的的错误提示:"RECURSIVE CALL TO SEGMENT"意思是&quo ...

  5. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

  6. 《Programming WPF》翻译 第7章 1.图形基础

    原文:<Programming WPF>翻译 第7章 1.图形基础 WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力.这有很多图形构架的方面来达到这个目标.其中最重要 ...

  7. 【给你几个使用Xamarin的理由】

    写在开篇前 这种代理操作,绑定影射的机制,有些极端的开发者确实难以接受.追求完美,总感觉原生的各种优点. 如果你非得较这个真,那您还是感觉补习下 Java Eclipse  ,买一台Mac 恶补Obj ...

  8. Linux上的设备管理器

    一般windows上我们用它自带的“设备管理器”来查看,管理,安装,卸载驱动. 那么问题来了,Linux上用什么命令来看呢? 可以用: lshw   lsusb lspci lsmod 查看特定模块. ...

  9. CPU的物理限制

    Quote from Solidot 密歇根大学的Igor Markov在上周的<自然>期刊上发表了一篇文章,谈论了CPU面临的基本物理限制.有学者曾估计预言CPU晶体管数目和性能增长的摩 ...

  10. 将DataTable转化为json对象

    private string DataTableTojson(DataTable dt)         {              List> list=new List>();    ...