zoj 1406 Jungle Roads
从A到F找到最短路即可,由于我不会用prim算法
只能用ku...算法,幸好这道题没有让输出路路径,
所以用ku...算法也行
我通常都是这样写的1.把边存起来2.快排3.并查集
呵呵,过了,还行吧,对了输入注意用scanf
中的%d前加一个空格
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct Tedge
{
int from,to;
int dist;
}edge;
edge dis[100];
int N;
int fa[30];
int find(int x)
{
if(x == fa[x])
return x;
fa[x] = find(fa[x]);
return(fa[x]);
}
int cmp(const void *a,const void *b)
{
return (*(edge *)a).dist - (*(edge *)b).dist;
}
int main()
{
int n,sub,m,d,i,count,sum;
char ch;
while(scanf("%d",&n)==1,n)
{
N = 0;
sub = n;
sub -= 1;
while(sub--)
{
scanf(" %c",&ch);
dis[N].from = ch - 'A' + 1;
scanf("%d",&m);
for(i=1;i<m;i++)
dis[N+i].from = dis[N].from;
while(m--)
{
scanf(" %c",&ch);
scanf("%d",&d);
dis[N].to = ch - 'A' + 1;
dis[N].dist = d;
N++;
}
} //输入完成
qsort(dis,N,sizeof(edge),cmp);
for(i=1;i<=n;i++)
fa[i] = i;
count =0;
sum = 0;
for(i=0;i<N;i++)
{
if(find(dis[i].from) != find(dis[i].to))
{
fa[find(dis[i].from)] = find(dis[i].to);
sum += dis[i].dist;
count++;
if(count == (n-1))break;
}
}
printf("%d\n",sum);
}
return 0;
}
posted on 2011-08-17 16:08 java课程设计例子 阅读(137) 评论(0) 编辑 收藏 举报