POJ 3026 Borg Maze(bfs+prim)
2012-12-08 11:19
246 查看
题目链接
题意也是挺难懂的。把所有的A,S看成一个点,求这些点的最小生成树。先BFS预处理出来然后prim,注意m,n后边的空格问题,然后数组开小了,也错了次。
题意也是挺难懂的。把所有的A,S看成一个点,求这些点的最小生成树。先BFS预处理出来然后prim,注意m,n后边的空格问题,然后数组开小了,也错了次。
#include <cstdio> #include <cstring> #include <string> #include <iostream> using namespace std; int p[1001][1001],low[1001]; char str[101][101]; int o[301][301],key[301][301],n,m,kk[1001]; int a[4] = {0,0,1,-1}; int b[4] = {1,-1,0,0}; int quer[20000],quec[20000]; void bfs(int num,int x,int y) { int st,end,i,j,step,k; st = end = 1; for(i = 0;i < n;i ++) { for(j = 0;j < m;j ++) { if(str[i][j] == '#') key[i][j] = 1; else key[i][j] = 0; } } quer[1] = x; quec[1] = y; p[num][num] = 0; key[x][y] = 1; step = 1; while(st <= end) { j = 1; for(i = st;i <= end;i ++) { for(k = 0;k <= 3;k ++) { int r,c; r = quer[i]+a[k]; c = quec[i]+b[k]; if(r >= 0&&r < n&&c >= 0&&c < m&&!key[r][c]) { key[r][c] = 1; if(str[r][c] == 'A'||str[r][c] == 'S') p[num][o[r][c]] = step; quer[end+j] = r; quec[end+j] = c; j ++; } } } step ++; st = end+1; end = end+j-1; } return ; } int main() { int t,i,j,num,ans,mi,z; char ch[101]; scanf("%d",&t); while(t--) { memset(o,0,sizeof(o)); memset(key,0,sizeof(key)); memset(kk,0,sizeof(kk)); scanf("%d%d",&m,&n); gets(ch); for(i = 0;i < n;i ++) { gets(str[i]); } num = 1; for(i = 0;i < n;i ++) { for(j = 0;j < m;j ++) { if(str[i][j] == 'S'||str[i][j] == 'A') o[i][j] = num++; else key[i][j] = 1; } } num --; for(i = 0;i < n;i ++) { for(j = 0;j < m;j ++) { bfs(o[i][j],i,j); } } ans = 0; for(i = 1;i <= num;i ++) low[i] = p[1][i]; kk[1] = 1; for(i = 1;i <= num-1;i ++) { mi = 100000; for(j = 1;j <= num;j ++) { if(mi > low[j]&&!kk[j]) { mi = low[j]; z = j; } } kk[z] = 1; ans += mi; for(j = 1;j <= num;j ++) { if(low[j] > p[z][j]&&!kk[j]) low[j] = p[z][j]; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 3026 Borg Maze(BFS+Prim)
- poj 3026( Borg Maze BFS + Prim)
- poj3026 Borg Maze bfs+最小生成树 prim
- poj 3026 Borg Maze dfs+prim
- Borg Maze——BFS+最小生成树
- POJ 3026 Borg Maze(bfs+最小生成树-Prim)
- UVA - 10307 Killing Aliens in Borg Maze(最小生成树kruskal+bfs)
- Borg Maze POJ - 3026(最小生成树prim,bfs)
- POJ 3062 Borg Maze BFS+最小生成树
- POJ 3026 Borg Maze BFS+最小生成树
- POJ 3026 Borg Maze bfs + 最小生成树
- J - Borg Maze——bfs+最小生成树_Prim算法
- POJ 3026 Borg Maze BFS+MST
- POJ 3026 Borg Maze & UVA 10307 Killing Aliens in Borg Maze(BFS,最小生成树)
- POJ3026 Borg Maze BFS+Prime
- 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
- poj-3026 Borg Maze BFS+最小生成树
- POJ - 3026 Borg Maze解题报告(Kruskal+Bfs)
- POJ-3026 Borg Maze BFS+最小生成树
- poj 3026 Borg Maze(bfs+prim)