C - Jungle Roads
2013-04-18 22:52
99 查看
第一次完整的写出图论中最小路径中常使用的Kruscal和Prim两种算法,呵呵。。。不过我还是比较kruscal(代码比较短,还容易记)
C -Jungle Roads
C -Jungle Roads
// File Name: tulun_jungle.cpp // Author: rudolf // Created Time: 2013年04月18日 星期四 20时57分16秒 //kruscal #include<vector> #include<list> #include<map> #include<set> #include<deque> #include<stack> #include<bitset> #include<algorithm> #include<functional> #include<numeric> #include<utility> #include<sstream> #include<iostream> #include<iomanip> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> using namespace std; const int maxn=30; struct node { int x,y,value; }road[10005]; int fa[maxn]; int find(int x) { return x==fa[x]?x:find(fa[x]); } bool cmp(node a,node b) { return a.value<b.value; } int main() { int i,j,n,num,m; while(cin>>n) { if(n==0) break; char a,b; int k=0; for(i=1;i<n;i++) { cin>>a>>m; for(j=1;j<=m;j++) { road[k].x=a-'A'+1; cin>>b>>num; road[k].y=b-'A'+1; road[k].value=num; k++; } fa[i]=i; } fa[i]=i; sort(road,road+k,cmp); int ans=0; for(i=0;i<k;i++) { int x1=find(road[i].x); int x2=find(road[i].y); if(x1!=x2) { fa[x2]=x1; ans+=road[i].value; } } cout<<ans<<endl; } return 0; }
// File Name: tulun_jungleprim.cpp // Author: rudolf // Created Time: 2013年04月18日 星期四 22时34分46秒 //prim #include<vector> #include<list> #include<map> #include<set> #include<deque> #include<stack> #include<bitset> #include<algorithm> #include<functional> #include<numeric> #include<utility> #include<sstream> #include<iostream> #include<iomanip> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> using namespace std; const int Maxn=10005; const int Maxv=30; int mapp[Maxn][Maxn]; int dis[Maxn]; bool visited[Maxn]; int n; int prim() { visited[0]=true; dis[0]=0; for(int i=1;i<n;i++) { dis[i]=mapp[0][i]; visited[i]=false; } int low_cost=0; for(int i=1;i<n;i++) { int tmp=Maxn; int tmp_index=0; for(int j=0;j<n;j++) { if(!visited[j]&&(dis[j]<tmp)) { tmp=dis[j]; tmp_index=j; } } visited[tmp_index]=true; low_cost+=tmp; for(int k=0;k<n;k++) { if(!visited[k]&&(dis[k]>mapp[tmp_index][k])) dis[k]=mapp[tmp_index][k]; } } return low_cost; } int main() { char a,b; int i,j,m,num; while(cin>>n) { if(n==0) break; for(i=0;i<n;i++) for(j=0;j<n;j++) { mapp[i][j]=Maxn; } for(i=0;i<n-1;i++) { // char c; cin>>a>>m; while(m--) { cin>>b>>num; mapp[b-'A'][i]=mapp[i][b-'A']=num; } } cout<<prim()<<endl; } return 0; }
相关文章推荐
- 1406 Jungle Roads(kruskal, 并查集)
- poj1251 Jungle Roads
- HDU 1301 Jungle Roads
- POJ 1251 Jungle Roads
- hdu 1301 Jungle Roads
- Hoj 1632 Jungle Roads
- Hdu 1301 - Jungle Roads
- Jungle Roads_hdu_1301(prim算法)
- Jungle Roads
- poj1251 Jungle Roads
- POJ 1251 Jungle Roads
- Jungle Roads
- poj 1251 Jungle Roads(Prim)
- hdoj 1301 Jungle Roads 【最小生成树】
- POJ 1251 / HDOJ 1301 Jungle Roads
- HDU1301 Jungle Roads
- 杭电 1301 Jungle Roads 【最小生成树&&Kruskal】
- POJ - 1251 Jungle Roads(最小生成树简单题)
- hdoj--1301--Jungle Roads(克鲁斯卡尔)
- hdu 1301 Jungle Roads【最小生成树】【MST】