POJ 3026 Borg Maze 广搜(BFS)+最小生成树
题意:从S出发,去抓每一个A,求总路径最短长度。在S点和A点人可以分身成2人,不过一次只能让一个人走。
思路是先利用BFS求出各点之间的距离,建成图,再套用最小生成树模板。
一次性A了。不过觉得在判断第几个编号的点时稍显麻烦了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; const int inf=1000000;
const int maxn=205;
char mapp[maxn][maxn];
bool visit[maxn][maxn];
bool vis[maxn];
int dx[]= {-1,0,1,0}; //四个方向
int dy[]= {0,-1,0,1};
int mat[maxn][maxn],dis[maxn];
int cou,ans; struct Node
{
int x;
int y;
int s; //记录距离
int num; //点的编号
} next,nodes[maxn]; //nodes[]存所有的点
void bfs(Node node,int a)
{
memset(visit,0,sizeof(visit));
node.s=0;
mapp[node.y][node.x]=' '; //访问过后将'S'或'A'变成' ',下次不需重复访问
queue<Node>q;
visit[node.x][node.y]=true;
q.push(node);
while(!q.empty())
{
node=q.front();
if(mapp[node.y][node.x]=='A')
{
if(a==0)
{
nodes[cou]=node;
mat[a][cou]=mat[cou][a]=node.s;
cou++; //记录有多少个点
}
else
{
int b;
for(int j=0;; j++)
if(nodes[j].x==node.x && nodes[j].y==node.y)
{
b=nodes[j].num;
break;
}
mat[a][b]=mat[b][a]=node.s; //将距离写入对角矩阵
}
}
q.pop();
for(int i=0; i<4; i++)
{
next=node;
next.x=node.x+dx[i];
next.y=node.y+dy[i];
if(!visit[next.x][next.y] && (mapp[next.y][next.x]==' ' || mapp[next.y][next.x]=='A'))
{
visit[next.x][next.y]=true;
next.s=node.s+1;
q.push(next); }
}
}
return ;
}
bool prim()
{
memset(vis,0,sizeof(vis));
for(int i=0;i<cou;i++)
dis[i]=(i==0? 0:inf);
ans=0;
for(int i=0;i<cou;i++)
{
int temp=inf,k=0;
for(int j=0;j<cou;j++)
{
if(!vis[j] && dis[j]<temp )
{
temp=dis[j];
k=j;
}
}
if(temp==inf)
return false;
vis[k]=true;
ans+=temp;
for(int j=0;j<cou;j++)
{
if(!vis[j] && dis[j]>mat[k][j])
dis[j]=mat[k][j];
}
}
return true;
}
int main()
{
//freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
while(n--)
{
int x,y;
memset(mapp,0,sizeof(mapp));
scanf("%d%d",&x,&y);
char c[maxn]={0};
gets(c);
for(int i=0; i<y; i++)
gets(mapp[i]);
for(int i=0; i<x; i++)
for(int j=0; j<y; j++)
if(mapp[i][j]=='S')
{
nodes[0].y=i;
nodes[0].x=j;
}
bool flag=true;
cou=1;
for(int i=0; i<cou; i++)
{
bfs(nodes[i],i);
if(flag)
{
for(int j=0; j<cou; j++)
nodes[j].num=j; //给各个点编号,只运行一次
flag=false;
}
}
prim();
printf("%d\n",ans);
}
return 0;
}
POJ 3026 Borg Maze 广搜(BFS)+最小生成树的更多相关文章
- POJ 3026 Borg Maze(Prim+bfs求各点间距离)
题目链接:http://poj.org/problem?id=3026 题目大意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...
- POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- poj 3026 Borg Maze (BFS + Prim)
http://poj.org/problem?id=3026 Borg Maze Time Limit:1000MS Memory Limit:65536KB 64bit IO For ...
- poj 3026 Borg Maze 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
- POJ 3026 Borg Maze【BFS+最小生成树】
链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- POJ - 3026 Borg Maze BFS加最小生成树
Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...
- POJ 3026 Borg Maze(bfs+最小生成树)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6634 Accepted: 2240 Descrip ...
- poj 3026 Borg Maze (bfs + 最小生成树)
链接:poj 3026 题意:y行x列的迷宫中,#代表阻隔墙(不可走).空格代表空位(可走).S代表搜索起点(可走),A代表目的地(可走),如今要从S出发,每次可上下左右移动一格到可走的地方.求到达全 ...
- 快速切题 poj 3026 Borg Maze 最小生成树+bfs prim算法 难度:0
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8905 Accepted: 2969 Descrip ...
随机推荐
- SecureCRT配置自动记录日志
很多人用SecureCRT时,希望自动记录日志,一个是方便以后查阅,一个是对自己的操作有个记录.可以看看自己做了什么操作,有时甚至可以看看之前是不是犯了什么错,是个很不错的功能. 设置很简单,还可以根 ...
- SpringMVC Web 相对路径与绝对路径
基本概念 绝对路径 绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径) 例如: C:\xyz\test.txt 代表了 test.txt 文件的绝对路径. http://www ...
- STM32 中的HARDFAULT 的查找方法
http://blog.csdn.net/zyboy2000/article/details/7668331
- Linux(CentOS 7) 安全加固之非业务端口服务关闭 postfix port 25
目录 关闭TCP 25 端口对应的服务 1. 确认对应端口的进程 2. 查找与关闭对应服务 3. 确认结果,端口已关闭 关闭TCP 25 端口对应的服务 [0 root@Qvps /root] #ca ...
- unity中使用Highlighting System v4.0插件给物体添加高亮
插件:Highlighting System v4.0 操作:在摄像机上挂上HighlightingRenderer脚本 脚本目录在\Assets\Plugins\HighlightingSystem ...
- 痞子衡嵌入式:串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP. 在嵌入式世界里,当我们提起XiP设备(支持代码原地 ...
- 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!
摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...
- ML Pipelines管道
ML Pipelines管道 In this section, we introduce the concept of ML Pipelines. ML Pipelines provide a uni ...
- Java SSM框架理论知识
一.Spring理论知识 1.Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成. 两大核心:1.IOC/DI(控制反转/依赖注入 ...
- 使用 Docker 部署 Node 应用
容器将应用与环境打包整合,解决了应用外部依赖的痛点,打包后通过窗口可方便地部署到任意环境,用过就知道很香. 创建示例应用 以 NestJS 为例,先创建一个示例应用. $ npm i -g @nest ...