http://poj.org/problem?id=3026

题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的路径L连接所有字母,输出这条路径L的总长度;

思路:用bfs找出每两个点之间的距离,然后用prim求出最小生成树;思路是参考网上的;

代码:

View Code

#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>using namespace std;#define inf 2501char map[51][51] = {'0'};int node[51][51] = {0};int col = 0;int row = 0;int num = 0;int edge[102][102] = {0};int dist[102][102] = {0};struct node{int row;int col;}mov[4]={{0,-1},{0,1},{-1,0},{1,0}};void bfs(int i,int j){bool visit[51][51] = {0};    queue<int>x;    queue<int>y;//memset(visit,0,sizeof(visit));     x.push(i);    y.push(j);int tem = node[i][j];//printf("%d hhhh\n",tem);   memset(dist,0,sizeof(dist));   visit[i][j] = 1;while(!x.empty())    {

int x1 = x.front();int y1 = y.front();

        x.pop();        y.pop();if(node[x1][y1])        edge[tem][node[x1][y1]] = dist[x1][y1];//printf("%d  \n",edge[node[i][j]][node[x1][y1]]);        for(int k = 0;k < 4; ++k)        {int mx = x1 + mov[k].row;int my = y1 + mov[k].col;if(mx >= 1&&mx <= row&&my >= 1&&my <= col&&!visit[mx][my]&&map[mx][my] != '#')            {                x.push(mx);                y.push(my);                visit[mx][my] = 1;                dist[mx][my] = dist[x1][y1] + 1;//printf("%d \n",dist[mx][my]);            }

        }    }//printf("JJJJJdd\n");}void prim(){int di[102] = {0};bool vis[102] = {0};// printf("JFDk");   for(int i = 1;i <= num; ++i)   {       di[i] = edge[1][i];       vis[i] = 0;   }int ans = 0;   vis[1] = 1;for(int i =1;i < num; ++i)   {int min = inf;int p = 0;for(int j = 2;j <= num; ++j)if(!vis[j] && di[j] < min)       {           min = di[j];           p = j;       }       vis[p] = 1;       ans = ans + min;//printf("%d %d \n",min,p);       for(int j = 1;j <= num; ++j)if(!vis[j] && di[j] > edge[p][j])       di[j] = edge[p][j];   }   printf("%d\n",ans);}int main(){int test = 0;    cin>>test;while(test--)    {        memset(node,0,sizeof(node));        num = 0;        cin>>col>>row;char temp[51] = {0};        gets(temp);for(int i = 1;i <= row; ++i)        {            gets(map[i]);for(int j = 1;j <= col;++j)if(map[i][j] == 'A' || map[i][j] == 'S')            node[i][j] = ++num;        }for(int i = 1;i <= row; ++i)for(int j = 1;j <= col; ++j)if(node[i][j])        bfs(i,j);//for(int i = 1;i <= num;++i)//for(int j = 1;j <= num; ++j)//printf("%d %d %d\n",edge[i][j],i,j);        prim();    }return 0;}

转载于:https://www.cnblogs.com/LT-blogs/archive/2012/03/16/2400326.html

poj 3026 Borg Maze相关推荐

  1. poj 3026 Borg Maze (最小生成树+bfs)

    有几个错误,调试了几个小时,样例过后 1Y. 题目:http://poj.org/problem?id=3026 题意:就是让求A们和S的最小生成树 先用bfs找每两点的距离,再建树.没剪枝 63MS ...

  2. POJ - 3026(BFS+最小生成树.krustal)

    题目: 题目链接: http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  3. 【POJ 3026】Borg Maze

    [POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...

  4. J - Borg Maze

    J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...

  5. Borg Maze最小生成树

    Borg Maze 原题链接https://vjudge.net/contest/352170#problem/I 本题给出一个地图,以及各个点的位置,大概意思就是所有点全部链接的最短路径,使用bfs ...

  6. Borg Maze (最小生成树+bfs)

    Borg Maze 题目描述: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant ...

  7. (POJ 3026) Borg Maze 最小生成树+bfs

    题目链接:http://poj.org/problem?id=3026. DescriptionThe Borg is an immensely powerful race of enhanced h ...

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

    链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...

  9. 【POJ - 3026】Borg Maze(bfs预处理 + 最小生成树,建图)

    题干: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the gala ...

  10. Borg Maze POJ - 3026 (BFS + 最小生成树)

    题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...

最新文章

  1. magento php 所需模块,Magento 博客
  2. css3中transform的用法
  3. 用Apache构建WEB服务器
  4. oracle导入dmp文件加条件,oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件...
  5. linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf
  6. HDU - 7029 Median 思维
  7. 对 SolarWinds 事件更深的思考:如何防御供应链攻击
  8. iOS开发之五:常用控件--UITextField的使用
  9. 顺序堆栈实现数制转换以十进制数转化为八进制数为例
  10. 创建My SQL 数据库
  11. matlab遗传算法gaot工具箱安装
  12. 位图图片转换矢量图的工具:Vector Magic for mac
  13. k8s-有状态应用编排
  14. php金字塔怎么理解,我理解的金字塔原理
  15. his服务器数据修改工具,某三甲医院基于HIS系统升级改造项目的实战分享
  16. ImageJ如何获取图片RGB强度和灰度值
  17. 「 C++ TwinCAT3 」倍福 “多轴开放体系软件结构设计”讲解
  18. java根据身份证号判断用户性别
  19. linux开机画面视频,Linux系统的开机画面
  20. NKOJ 2522 Sandy的卡片(差分数组+DP)

热门文章

  1. 744..寻找比目标字母大的最小字母(力扣leetcode) 博主可答疑该问题
  2. 2018春江苏省计算机等级考试,2018年春季江苏省计算机等级考试报名通知
  3. 攻防世界 Web_php_include write up
  4. HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
  5. Docker优势以及与传统虚拟机对比(1)
  6. 基于三台主机部署phpwind
  7. 第二周作业购物车程序
  8. python alembic which comes from SQLalchemy
  9. JAVA共通関数--シングルクォーテーションをSQL用に追加する
  10. php移动文件的函数 move_uploaded_file()和copy