| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:总有人前赴后继的贴代码,,,,FT,,,不知是炫耀还是....In Reply To:哈哈,就是最小生成树啊。 贴贴源程序了。 Posted by:lihao102 at 2008-08-28 15:02:54 > #include<stdio.h>
> #include<math.h>
>
> #define MAX 800
> #define MAX_VALUE 100000000
>
> struct _node
> {
> int x;
> int y;
> };
>
> struct _aaa
> {
> int s;
> int e;
> };
>
> struct _bbb
> {
> int pre;
> float we;
> };
>
> typedef struct _aaa aaa;
> typedef struct _bbb bbb;
> typedef struct _node node;
>
> bbb flag[MAX];
> node town[MAX];
> float map[MAX][MAX];
> aaa result[MAX];
>
> int town_count = 0;
> int exist = 0;
> int start = 0;
>
> int main(void)
> {
> int i = 0;
> int j = 0;
>
> scanf("%d",&town_count);
>
> for(i = 0; i < town_count; ++i)
> {
> scanf("%d %d",&town[i].x,&town[i].y);
> }
>
> for(i = 0; i < town_count; ++i)
> {
> for(j = 0; j < town_count; ++j)
> {
> if( i == j )
> {
> map[i][j] = 0;
> continue;
> }
>
> map[i][j] = (float)sqrt( ( town[i].x - town[j].x ) * ( town[i].x - town[j].x ) + ( town[i].y - town[j].y ) * ( town[i].y - town[j].y ) );
> }
> }
>
> scanf("%d",&exist);
>
> for(i = 0; i < exist; ++i)
> {
> int x = 0;
> int y = 0;
> scanf("%d %d",&x,&y);
> map[x-1][y-1] = 0.01f;
> map[y-1][x-1] = 0.01f;
> start = x - 1;
> }
>
>
> for(i = 0; i < town_count; ++i)
> {
> flag[i].pre = start;
> flag[i].we = map[i][start];
> }
>
> flag[start].we = 0;
>
> float min = 0;
> int k = -1;
> int len = 0;
>
> for(i = 0; i < town_count - 1; ++i)
> {
> min = MAX_VALUE;
> for(j = 0; j < town_count; ++j)
> {
> if( flag[j].we != 0 && flag[j].we < min )
> {
> min = flag[j].we;
> k = j;
> }
> }
>
> if( map[k][flag[k].pre] - 0.01 > 0 )
> {
> result[len].s = flag[k].pre;
> result[len].e = k;
> ++len;
> }
>
> for(j = 0; j < town_count; ++j)
> {
> if( map[j][k] < flag[j].we )
> {
> flag[j].we = map[j][k];
> flag[j].pre = k;
> }
> }
> }
>
> for(i = 0; i < len; ++i)
> {
> printf("%d %d\n",result[i].e + 1,result[i].s + 1);
> }
>
>
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator