Cod sursa(job #1712081)

Utilizator asimptota12Sirb Robert Aurelian asimptota12 Data 1 iunie 2016 22:59:58
Problema Metrou4 Scor 0
Compilator c Status done
Runda Arhiva ICPC Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
struct poz
{
    int x;
    int y;
    int v;

};
struct poz a[150000];
int N;

int vecin(int r,int t)
{
    int  dist,m=999999;
    int i ,s;
    for(i=0;i<N;i++)
    {
        if(a[i].v==0&&(a[i].x!=r||a[i].y!=t))
        {

            dist=sqrt(pow(a[i].x-r,2))+sqrt(pow(a[i].y-t,2));
            if(m>dist)
            {
                m=dist;
                s=i;
            }
        }
    }
    a[s].v=1;
    return s;
}
int distanta(int r,int t,int k,int l)
{
    return (sqrt(pow(k-r,2))+sqrt(pow(l-t,2)));
}
int gata()
{
    int i;
    for(i=0;i<N;i++)
    {
        if(a[i].v==0)
            return 0;
    }
    return 1;
}
int main()
{
    int i,j,k;
    int dist=0;
    FILE *f1,*f2;
    f1=fopen("metrou4.in","r");
    f2=fopen("metrou4.out","w");
    int r,t,T;
    fscanf(f1,"%d",&T);
    for(j=0;j<T;j++)
    {
        fscanf(f1,"%d",&N);
        for(k=0;k<N;k++)
        {
            fscanf(f1,"%d %d",&a[k].x,&a[k].y);
        }
        while(gata()==0)
        {
            i=vecin(r,t);
            dist=dist+distanta(r,t,a[i].x,a[i].y);
            r=a[i].x;
            t=a[i].y;
        }
        fprintf(f2,"%d\n",dist);
        for(i=0;i<N;i++)
        {
            a[i].x=0;
            a[i].y=0;
            a[i].v=0;
        }
    }





    return 0;
}