题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间。一条路径上的时间跟人数是无关的,只跟路径长度有关。

思路:刚开始人都在起点,当派一定人数去最近的外星人后,起点就变成两个了,然后从两个起点去最近的外星人,起点就变成三个了,,,,这就是最小生成树了。

include<stdio.h>
#include<math.h>
#include<queue>
#include<stdlib.h>
#include<string.h>
const int N=251;
const int inf=0x3fffffff;
using namespace std;
int num,f[N],n,m,k,map[51][51],dir[4][2]={0,1,0,-1,1,0,-1,0};
bool vis[51][51];
char cap[51][51];
struct edge
{int st,ed,w;
}e[N*N];
struct node
{int x,y;
}p[N];
void addedge(int x,int y,int w)
{e[num].st=x;e[num].ed=y;e[num++].w=w;
}
int dis(int i,int j)
{return abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y);
}
int cmp(void const *a,void const *b)
{edge *c,*d;c=(edge *)a;d=(edge *)b;return c->w-d->w;
}
int find(int a)
{if(a!=f[a])f[a]=find(f[a]);return f[a];
}
void bfs(int u)
{queue<edge>Q;edge cur,next;int i,j,x,y;for(i=0;i<n;i++)for(j=0;j<m;j++){map[i][j]=inf;vis[i][j]=false;}map[p[u].x][p[u].y]=0;vis[p[u].x][p[u].y]=true;cur.st=p[u].x;cur.ed=p[u].y,cur.w=0;Q.push(cur);while(!Q.empty()){cur=Q.front();Q.pop();vis[cur.st][cur.ed]=false;for(i=0;i<4;i++){next.st=x=cur.st+dir[i][0];next.ed=y=cur.ed+dir[i][1];if(x>=0&&x<n&&y>=0&&y<m&&cap[x][y]!='#'){next.w=cur.w+1;if(map[x][y]>next.w){map[x][y]=next.w;if(vis[x][y]==false){Q.push(next);vis[x][y]=true;}}}}}for(i=1;i<k;i++){if(i==u)continue;addedge(u,i,map[p[i].x][p[i].y]);}}
int main()
{int i,j,t,sum,x,y;char str[100],ch;scanf("%d",&t);while(t--){scanf("%d%d",&m,&n);ch=getchar();while(ch!='\n')ch=getchar();k=1;num=0;sum=0;for(i=0;i<n;i++){gets(str);for(j=0;j<m;j++){cap[i][j]=str[j];if(str[j]=='A'||str[j]=='S'){p[k].x=i;p[k++].y=j;}              }}for(i=1;i<k;i++){f[i]=i;bfs(i);}qsort(e,num,sizeof(e[0]),cmp);for(i=0;i<num;i++){x=find(e[i].st);y=find(e[i].ed);if(x==y)continue;sum+=e[i].w;f[x]=find(y);}printf("%d\n",sum);}return 0;
}

转载于:https://www.cnblogs.com/pangblog/p/3331253.html

poj 3026 (最小生成树)相关推荐

  1. 【POJ 3026】Borg Maze

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

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

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

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

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

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

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

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

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

  6. poj 3026 BorgMaze 最小生成树Kruskal、Prim(Prim VS报错待解决

    题意 以及 思路: 从S点有一伙人出发去消灭A点的敌人,在S点或者A点可以分裂成几个小队然后分别走,这样路径=总队路径+各个小队路径 问你怎样路径最短. 在一个y行 x列的迷宫中,有可行走的通路空格' ...

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

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

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

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

  9. poj 3522(最小生成树应用)

    题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成 ...

最新文章

  1. 递归与分治之棋盘覆盖问题
  2. 达摩院三周年,当初立的flag都实现了吗?
  3. php 字典 枚举,秒爆十万字典:奇葩技巧快速枚举“一句话后门”密码
  4. three.js插件实现立体动感视频播放效果
  5. windows下安装mysql教程
  6. [VC6] RadioBox使用入门
  7. 深度残差收缩网络:(二)整体思路
  8. xyntservice
  9. 用cmd来向mysql导入sql文件
  10. JAVA中,目录C:\\TEMP等效于C:\TEMP
  11. sqlmap的安装与使用
  12. 哈佛幸福课23集观后感
  13. 吉大17秋计算机应用二,吉大17秋《计算机应用基础》在线作业二.doc
  14. android极简手机壁纸,极简桌面安卓版
  15. 用C语言写一个图书管理系统大作业
  16. python开发的项目管理软件_10 个超好用的免费开源项目管理软件
  17. 010. 递增子序列
  18. Unity + Mirror实现原创卡牌游戏局域网联机
  19. 在阿里云国内搭建一个纯净的 kubernetes 环境
  20. Network Stack Specialization for Performance

热门文章

  1. Java程序员必看!2021最新爱奇艺Java社招面试题目
  2. 一份字节跳动面试官给你的Java技术面试指南,彻底帮你搞懂
  3. python【数据结构与算法】快速幂and矩阵快速幂取模(看不懂你来打我)
  4. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY16-强化学习
  5. 计算缺失的元素 java_计算包含缺失值的相关系数
  6. 本地缓存需要高时效性怎么办_缓存在高并发场景下的常见问题
  7. dockerfile tomcat 配置jvm参数_Java 从小白到大牛,JVM 不得不知的一些参数和配置
  8. 剪切粘贴时总是上次的内容_macOS系统上面如何实现Windows上的“剪切”功能
  9. 进阶学习(3.11) Facade Pattern 门面模式
  10. 网络营销外包——网络营销外包专员是怎样提升网站收录概率的?