7_22_S题 Borg Maze(最小生成树)
来源:互联网 发布:网络爬虫系统架构图 编辑:程序博客网 时间:2024/06/17 23:38
7_22_S题 Borg Maze
题意
给出一个矩阵,求将其中的A和S全部连通的最小距离。
思路
最小生成树,先BFS处理出所有字母两两之间的最短距离。然后跑一遍最小生成树即可,这题输入数据神坑。。。
代码
#include <cmath>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>using namespace std;const int maxm = 150*150*2;const int maxn = 150;typedef long long ll;int n,m;int mov[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};int maze[maxn][maxn];struct Edges{ int u,v; double w; Edges(){}; Edges(int u,int v,double w):u(u),v(v),w(w){}; bool operator < (const Edges & b) const { return w < b.w; }}edge[maxm];int fa[maxn];int Find(int x){ return fa[x] == x ? x :fa[x] = Find(fa[x]);}bool Union(int x ,int y){ x = Find(x); y = Find(y); if(x == y) return false; fa[x] = y; return true;}double lent = 0;void init(int n){ for(int i = 0 ; i <= n ; i ++) fa[i] = i; lent = 0;}struct Point{ int x,y,len; Point(){}; Point(int x, int y):x(x),y(y){};}Loc[maxn];int cnt = 0;bool vis[maxn][maxn];int bfs(Point cur,int idx){ memset(vis, 0,sizeof vis); cur.len = 0; queue<Point> Q; Q.push(cur); while(!Q.empty()){ cur = Q.front(); Q.pop(); vis[cur.x][cur.y] = true;; Point next; for(int i = 0 ; i < 4 ; i ++){ next.x = cur.x + mov[i][0]; next.y = cur.y + mov[i][1]; next.len = cur.len + 1; if(next.x >= 0 && next.x <= n && next.y >=0 && next.y <= m && !vis[next.x][next.y]){ if(maze[next.x][next.y] == 32){ Q.push(next); vis[next.x][next.y] = true;; } else if(maze[next.x][next.y] > 1e6){ edge[cnt ++] = Edges(idx,maze[next.x][next.y] - 1e6, next.len); } } } }}int main (){ int T; scanf("%d", &T); while (T --){ int cntp = 0; scanf("%d %d", &m,&n); while(getchar()!='\n'); for(int i = 0 ; i < n ; i ++){ for(int k = 0 ; k < m ; k ++){ maze[i][k] = getchar(); if(maze[i][k] >= 'A' && maze[i][k] <= 'Z'){ maze[i][k] = 1e6 + cntp; Loc[cntp++] = Point(i,k); } } while(getchar()!='\n'); } init(cntp); cnt = 0; for(int i = 0 ; i < cntp ; i ++){ bfs(Loc[i],maze[Loc[i].x][Loc[i].y]-1e6); } sort(edge,edge+cnt); for(int i = 0 ; i < cnt ; i ++){ Edges & e = edge[i]; if(Union(e.u,e.v)) { lent += e.w; } } printf("%.0f\n", lent); }}
0 0
- 7_22_S题 Borg Maze(最小生成树)
- poj 3026 Borg Maze(搜索+最小生成树)
- POJ 3026 Borg Maze (最小生成树 + BFS)
- POJ 3026 Borg Maze(BFS+最小生成树)
- POJ-3026 Borg Maze(最小生成树)
- Borg Maze(最小生成树_bfs+prim)
- poj 3026 Borg Maze(BFS+最小生成树)
- POJ 3026 Borg Maze(bfs+最小生成树-Prim)
- POJ 3026 Borg Maze(最小生成树--prime+BFS)
- POJ 3026 Borg Maze(BFS+最小生成树)
- poj3026 Borg Maze (BFS+最小生成树)
- POJ-3026 Borg Maze (BFS+最小生成树)
- POJ 3026 Borg Maze(bfs+最小生成树)
- poj3026——Borg Maze(BFS+最小生成树)
- POJ 3026 Borg Maze (最小生成树)
- POJ 3026 Borg Maze(最小生成树)
- POJ 3026-Borg Maze(BFS+prim最小生成树)
- poj 3026 Borg Maze 最小生成树
- JSESSIONID、SESSION、cookie
- 设置一个DIV固定在底部,并且左右固定,垂直居中
- Gmail 列出所有未读邮件
- 7_22_R题 Building a Space Station(最小生成树)
- 拓扑排序
- 7_22_S题 Borg Maze(最小生成树)
- Android Studio你不知道的快捷键(三)
- 成功人士的名言精选——看看你的名言是哪一句?你做到了吗?
- js 中 NaN
- 7_22_T题 Constructing Roads(最小生成树)
- BCGControlBar中文教程之Ribbon Backstage视图(三)
- 友元
- 反弹Shell总结
- spring-mvc配置