胡涂乱写


                   pengyuehui@gmail.com
                  Behind every successful man, there is a woman.
                            And behind every unsuccessful man, there are two.
                            先看看美女
                  

« 上一篇: 感受 下一篇: 睡觉啊睡觉啊 »
pengyuehui @ 2006-07-19 02:03

#include <stdio.h>
#include <string.h>
#include <math.h>

#define MAX 20

double table[MAX+1][MAX+1],lowcost[MAX+1],result;
int nearvex[MAX+1],city;

struct coordinate
{
        double x;
        double y;
}p[MAX+1];

struct Rec
{
        int from;
        int to;
        double cost;
}rec[MAX+1];

inline double dis(double a,double b,double c,double d)
{
        return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}

void init()
{
        int i,j;
        for(i=1;i<=city;i++)
                scanf("%lf%lf",&p[i].x,&p[i].y);
        for(i=1;i<=city;i++)
                for(j=1;j<=city;j++)
                        table[i][j]=dis(p[i].x,p[i].y,p[j].x,p[j].y);
}

void Prim()
{
        int i,j,t=1;
        result=0;
        nearvex[1]=-1;
        for(i=2;i<=city;i++)
        {
                lowcost[i]=table[i][1];
                nearvex[i]=1;
        }
        for(i=2;i<=city;i++)
        {
                int pmin=0;
                double min=999999;
                for(j=1;j<=city;j++)
                {
                        if( nearvex[j]!=-1 && lowcost[j]<min)
                        {
                                min=lowcost[j];
                                pmin=j;
                        }
                }
                if(pmin)
                {
                        rec[t].from=pmin;
                        rec[t].to=nearvex[pmin];
                        rec[t++].cost=min;
                        result+=min;
                        nearvex[pmin]=-1;
                        for(j=1;j<=city;j++)
                        {
                                if(nearvex[j]!=-1 && table[j][pmin]<lowcost[j])
                                {
                                        lowcost[j]=table[j][pmin];
                                        nearvex[j]=pmin;
                                }
                        }
                }
        }
}

int main()
{
        while(1)
        {
                scanf("%d",&city);
                if(!city) break;
                init();
                Prim();
                printf("%.3lf\n",result);
        }
        return 0;
}

 

TOJ 1411 ---> ZOJ 1914
ZOJ 1372
ZOJ 1406
ZOJ 1586
ZOJ 1203


大家在本周内写完这几个程序即可。。。不懂的问一下!!~



评论 / 个人网页 / 扔小纸条
*昵称

已经注册过? 请登录

Email
网址
*评论
 


 
how time flies
#记录生活点点滴滴#
· 所有网志
· 日志
· acm
· 闲谈
· 算法
· math
· 经验
· 未分类
站内搜索
links
· 我的歪酷
· ####ACM牛人们####
· dingwei
· goodhorsezxj
· washington
· 文渊阁
· ospattern
· frkstyc
· flymouse
· ericsummer
· roba
· BunnyQ
· Lonnie Heinke
· tianya
· cnhawk
· wtommy
· tashi
· ###my classmates###
· 帅哥zuo
· 班长
· 石胜男
· 丫头
· 大个
· ####bbs和高校oj####
· tju-bbs
· 白云黄鹤
· 水木清华
· 厦门大学-鼓浪听涛
· 上海交通大学-饮水思源
· 湖南大学oj
· toj
· poj
· zoj
· Ural State University
· #####常用网站#####
· computer algorithm
· X-编程小组
· 信息学初学者之家·OIBH
· 组合算法
· 算法 ALGORITHM
· algorithm tutorial
· cppreference
· 全球中文linux第一门户
· linux论坛
· 编程爱好者题库
· 在线翻译
· 技术论坛
· msdn在线查找

订阅 RSS

0015528

歪酷博客

本模版系 歪酷博客Zazamu Studio 授权使用 请尊重知识产权