-
Highways
- POJ - 1751
- 记录一下当前点被谁更新建立pre数组记录就解决了
-
#include<algorithm> #include<iostream> #include<cmath> #include<iomanip> using namespace std; #define maxn 777 #define inf 0x3f3f3f3f double mmp[maxn][maxn]; double dis[maxn],ans[maxn]; int n,m,t,u,v; double x[maxn],y[maxn]; bool vis[maxn]; void prim() { dis[1]=0; for(int i=0; i<n; i++) { double temp=inf; int k=-1; for(int j=1; j<=n; j++) if(dis[j]<temp&&!vis[j]) temp=dis[k=j]; if(k==-1) break; vis[k]=1; if(i>0&&dis[k]) cout<<ans[k]<<" "<<k<<endl; for(int j=1; j<=n; j++) if(dis[j]>mmp[k][j]&&!vis[j]) { dis[j]=mmp[k][j]; ans[j]=k; } } return ; } double cal(int i,int j) { return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } int main() { cin>>n; for(int i=1; i<=n; i++) { cin>>x[i]>>y[i]; dis[i]=inf; vis[i]=0; } for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) mmp[i][j]=mmp[j][i]=cal(i,j); cin>>m; while(m--) { cin>>u>>v; mmp[u][v]=mmp[v][u]=0; } prim(); return 0; }
Highways -PRIM打印生成树边
最新推荐文章于 2019-07-23 17:09:17 发布
本文介绍了一种使用Prim算法解决最小生成树问题的方法,通过详细的代码实现,展示了如何在给定点集和边集中找到连接所有点的最短路径。文章首先定义了必要的数据结构,然后逐步解释了Prim算法的实现过程,最后通过一个具体实例演示了算法的实际应用。
4685

被折叠的 条评论
为什么被折叠?



