poj 3026 Borg Maze
http://poj.org/problem?id=3026
题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用最短的路径L连接所有字母,输出这条路径L的总长度;
思路:用bfs找出每两个点之间的距离,然后用prim求出最小生成树;思路是参考网上的;
代码:
#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相关推荐
- poj 3026 Borg Maze (最小生成树+bfs)
有几个错误,调试了几个小时,样例过后 1Y. 题目:http://poj.org/problem?id=3026 题意:就是让求A们和S的最小生成树 先用bfs找每两点的距离,再建树.没剪枝 63MS ...
- POJ - 3026(BFS+最小生成树.krustal)
题目: 题目链接: http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total S ...
- 【POJ 3026】Borg Maze
[POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...
- J - Borg Maze
J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...
- Borg Maze最小生成树
Borg Maze 原题链接https://vjudge.net/contest/352170#problem/I 本题给出一个地图,以及各个点的位置,大概意思就是所有点全部链接的最短路径,使用bfs ...
- Borg Maze (最小生成树+bfs)
Borg Maze 题目描述: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant ...
- (POJ 3026) Borg Maze 最小生成树+bfs
题目链接:http://poj.org/problem?id=3026. DescriptionThe Borg is an immensely powerful race of enhanced h ...
- (最小生成树) Borg Maze -- POJ -- 3026
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...
- 【POJ - 3026】Borg Maze(bfs预处理 + 最小生成树,建图)
题干: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the gala ...
- Borg Maze POJ - 3026 (BFS + 最小生成树)
题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...
最新文章
- magento php 所需模块,Magento 博客
- css3中transform的用法
- 用Apache构建WEB服务器
- oracle导入dmp文件加条件,oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件...
- linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf
- HDU - 7029 Median 思维
- 对 SolarWinds 事件更深的思考:如何防御供应链攻击
- iOS开发之五:常用控件--UITextField的使用
- 顺序堆栈实现数制转换以十进制数转化为八进制数为例
- 创建My SQL 数据库
- matlab遗传算法gaot工具箱安装
- 位图图片转换矢量图的工具:Vector Magic for mac
- k8s-有状态应用编排
- php金字塔怎么理解,我理解的金字塔原理
- his服务器数据修改工具,某三甲医院基于HIS系统升级改造项目的实战分享
- ImageJ如何获取图片RGB强度和灰度值
- 「 C++ TwinCAT3 」倍福 “多轴开放体系软件结构设计”讲解
- java根据身份证号判断用户性别
- linux开机画面视频,Linux系统的开机画面
- NKOJ 2522 Sandy的卡片(差分数组+DP)
热门文章
- 744..寻找比目标字母大的最小字母(力扣leetcode) 博主可答疑该问题
- 2018春江苏省计算机等级考试,2018年春季江苏省计算机等级考试报名通知
- 攻防世界 Web_php_include write up
- HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
- Docker优势以及与传统虚拟机对比(1)
- 基于三台主机部署phpwind
- 第二周作业购物车程序
- python alembic which comes from SQLalchemy
- JAVA共通関数--シングルクォーテーションをSQL用に追加する
- php移动文件的函数 move_uploaded_file()和copy