Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:总有人前赴后继的贴代码,,,,FT,,,不知是炫耀还是....

Posted by GetAC at 2008-08-28 15:20:40 on Problem 1751
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator