1001
Posted Si考者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1001相关的知识,希望对你有一定的参考价值。
题目大意:
求最小生成树
解题思路:
利用最小生成树的两种算法,在离散和数据结构都学过
代码:
#include<iostream> #include<algorithm> using namespace std; struct node{ int from; int to; int w; }; node edge[102*100]; int parent[102]; bool cmp(node a,node b) { if(a.w<=b.w) return true; return false; } //查找已经建完道路的顶点 int find(int a) { if(a!=parent[a]) return find(parent[a]); else return a; } int kruskal(int n,int m) { sort(edge,edge+m,cmp); int i,x,y,ans=0; for(i=0;i<m;i++) { x=edge[i].from; y=edge[i].to; x=find(x); y=find(y); if(x!=y) { ans+=edge[i].w; parent[y]=x; } } return ans; } int main() { int n,q,k,i,j,m; while(cin>>n) { m=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>k; if(i>=j) continue; edge[m].from=i; edge[m].to=j; edge[m].w=k; m++; } } for(k=1;k<=n;k++) parent[k]=k; cin>>q; for(k=1;k<=q;k++) { cin>>i>>j; i=find(i); j=find(j); parent[j]=i; } cout<<kruskal(n,m)<<endl; } return 0; }
以上是关于1001的主要内容,如果未能解决你的问题,请参考以下文章
setOnClickListener RecycleView(在一个片段中)导航到另一个片段