7.22 S POJ 3026 Borg Maze
来源:互联网 发布:java开平方函数 编辑:程序博客网 时间:2024/06/18 04:02
题意:在n*m的有障碍点阵中,任意两点可以连线,求使所有点连通,且权值和最小。
思路:直接bfs是不行的,还是想到最小生成树。只是不知道点与点之间的距离,想到用bfs求一点到其他点的最小距离。
代码:
//coder:OX_louis#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <ctime>#include <stack>using namespace std;#define MP(a,b) make_pair(a,b)#define pr(x) cout << #x << ": " << x << " "#define pl(x) cout << #x << ": " << x << endl;#define pri(a) printf("%d\n",(a))#define xx first#define yy second#define sa(n) scanf("%d", &(n))#define sai(n) scanf("%I64d", &(n))#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++)#define rep(i,a,b) for(int (i)=(a); (i)<(b); (i)++)#define per(i,a,b) for(int (i)=(b)-1; (i)>=(a); (i)--)#define CLR(a,i) memset((a),(i),sizeof(a))char mp[301][301];int u[20000],v[20000],w[20000],r[20000],rods,p[2700];int find(int x) {return x==p[x]?x:p[x]=find(p[x]);}int step[301][301];struct node{ int i,j;}que[20000];int n,m;int mi[]={0,0,1,-1};int mj[]={1,-1,0,0};int cmp(int a,int b){ return w[a]<w[b];}void bfs(int bi,int bj){ int hed=0,tal=0; CLR(step,-1); node st; st.i=bi; st.j=bj; step[bi][bj]=0; que[tal++]=st; while(tal>hed){ node nw=que[hed++],nx; rep(i,0,4){ nx.i=nw.i+mi[i]; nx.j=nw.j+mj[i]; if(nx.i<0||nx.i>=n||nx.j<0||nx.j>=m)continue; if(mp[nx.i][nx.j]=='#'||step[nx.i][nx.j]>=0)continue; step[nx.i][nx.j]=step[nw.i][nw.j]+1; if(isalpha(mp[nx.i][nx.j])){ u[rods]=bi+bj*50; v[rods]=nx.i+nx.j*50; w[rods]=step[nx.i][nx.j]; rods++; } que[tal++]=nx; } }}int Kruskal(){ int ans=0; rep(i,0,2600) p[i]=i; rep(i,0,rods) r[i]=i; sort(r,r+rods,cmp); rep(i,0,rods){ int e=r[i], x=find(u[e]), y=find(v[e]); if(x!=y){ ans+=w[e]; p[x]=y; } } return ans;}int main(){ int T; sa(T); while(T--){ sa(m); sa(n); gets(mp[0]); rep(i,0,n) gets(mp[i]); rods=0; rep(i,0,n) rep(j,0,m){ if(isalpha(mp[i][j])){ bfs(i,j); } } pri(Kruskal()); } return 0;}
0 0
- 7.22 S POJ 3026 Borg Maze
- poj 3026 Borg Maze
- POJ 3026 Borg Maze
- POJ 3026 Borg Maze
- poj 3026 Borg Maze
- poj-3026-Borg Maze
- POJ 3026 Borg Maze
- POJ 3026 Borg Maze
- poj 3026 Borg Maze
- POJ-3026-Borg Maze
- poj 3026 Borg Maze
- POJ 3026 Borg Maze
- POJ 3026 Borg Maze
- poj 3026 Borg Maze
- poj 3026 Borg Maze
- POJ:3026 Borg Maze
- poj 3026 Borg Maze
- POJ 3026-Borg Maze
- java死锁
- Toolbar的高级性能
- myeclipse导入新工程
- 安卓IPC机制(一)
- iOS缓存机制及实战验证
- 7.22 S POJ 3026 Borg Maze
- 程序连接
- 数据库索引的作用和优点缺点
- 常用主流浏览器的安全机制
- 【SIP基础】SIP协议头
- RelativeLayout常用布局
- 数据结构实验之链表四:有序链表的归并
- 云端飘 Java中从控制台输入数据的几种常用方法
- 开启Jasper的JSP预编译支持