POJ 3026 Brog Maze BFS+最小生成树
来源:互联网 发布:乳晕 冰点脱毛 知乎 编辑:程序博客网 时间:2024/06/16 10:19
链接:
3026
题意:
一个M X N 的迷宫里有1个起点和X个目标点,求起点到所有目标点的总步数;搜索迷宫的代价被定义成参与搜索的所有子群体走过的步数总和。例如,如果原群体走了5 步,然后分裂成2 个子群体,每个子群体又分别走了3 步,则总步数为:11=5+3+3。
题解:
通过BFS 起点和目标点 建边,再用prim算法即可答案
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;#define maxx 333struct node{ int x,y;} head;char map[maxx][maxx];int edge[maxx][maxx];int lowdis[maxx];int num[maxx][maxx]; //存点的下标int vis[maxx][maxx],dis[maxx][maxx];int dir[4][2]= {1,0,-1,0,0,1,0,-1};int m,n,s,ans;void bfs(int sx,int sy){ queue<node>q; memset(vis,0,sizeof(vis)); vis[sx][sy]=1; dis[sx][sy]=0; q.push((node){sx,sy}); while(!q.empty()) { head=q.front(); q.pop(); if(map[head.x][head.y]=='S'||map[head.x][head.y]=='A') edge[num[sx][sy]][num[head.x][head.y]]=dis[head.x][head.y]; int tx,ty; for(int i=0; i<4; i++) { tx=head.x+dir[i][0]; ty=head.y+dir[i][1]; if(tx<0||ty<0||tx>=m||ty>=n||map[tx][ty]=='#'||vis[tx][ty]) continue; vis[tx][ty]=1; dis[tx][ty]=dis[head.x][head.y]+1; q.push((node){tx,ty}); } } return;}void prim(){ int i,j,loc,minn; for(i=0;i<=s;i++) lowdis[i]=edge[0][i]; lowdis[0]=-1; for(i=1;i<s;i++) { minn=9999999; for(j=0;j<s;j++) if(lowdis[j]!=-1&&lowdis[j]<minn) minn=lowdis[j],loc=j; ans+=lowdis[loc]; lowdis[loc]=-1; for(j=0;j<s;j++) if(lowdis[j]>edge[loc][j]) lowdis[j]=edge[loc][j]; } return ;}int main(){ int t,i,j; scanf("%d",&t); while(t--) { s=ans=0; memset(num,0,sizeof(num)); scanf("%d%d",&n,&m); gets(map[m]); for(i=0; i<m; i++) gets(map[i]); for(i=0; i<m; i++) for(j=0; j<n; j++) if(map[i][j]=='A'||map[i][j]=='S') num[i][j]=s++; for(i=0; i<m; i++) for(j=0; j<n; j++) { if(map[i][j]=='S'||map[i][j]=='A') bfs(i,j); if(i==j) edge[i][j]=999999; } prim(); cout<<ans<<endl; } return 0;}
0 0
- POJ 3026 Brog Maze BFS+最小生成树
- [POJ 3026]Brog Maze[存疑!!!!!]
- poj 3026 Borg Maze 最小生成树+bfs
- POJ 3026 Borg Maze bfs + 最小生成树
- poj 3026 Borg Maze bfs建图+最小生成树
- poj 3026 Borg Maze (bfs+最小生成树)
- POJ 3026 Borg Maze【BFS+最小生成树】
- POJ 3026 Borg Maze (最小生成树 + BFS)
- POJ 3026 Borg Maze(BFS+最小生成树)
- POJ训练计划3026_Borg Maze(最小生成树+BFS)
- poj 3026 Borg Maze (bfs + 最小生成树)
- POJ 3026 Borg Maze (bfs+最小生成树)
- poj 3026 Borg Maze bfs+最小生成树
- POJ 3026 —— Borg Maze BFS + 最小生成树
- poj 3026 Borg Maze(BFS+最小生成树)
- POJ 3026 Borg Maze bfs + 最小生成树
- POJ 3026 Borg Maze(bfs+最小生成树-Prim)
- poj-3026 Borg Maze BFS+最小生成树
- 重构实践
- TKPROF 命令语法
- 记录我的学习历程
- Squid服务日志分析
- Android 众多的布局属性详解
- POJ 3026 Brog Maze BFS+最小生成树
- <C/C++数据结构>散列表(C++模板实现)
- 多线程
- bzoj1014 [JSOI2008]火星人prefix
- 归档文件保存路径设置
- 为什么要用BitSet
- 反射获取构造器对象
- ASP.NET MVC模型部分验证
- [Stanford Cryptography I] Week1