虫洞

 

#include<stdio.h>
int sx;
int sy;
int ex;
int ey;
int map[99][99];
int vist[99];
int N;
int sum=0;
int min=9999;
int juedui(int a,int b)
{
    if(a-b<0)
        return -1;
    else
        return 1;
}
void chuan(int x,int y)
{
    if(juedui(ex,x)*(ex-x)+juedui(ey,y)*(ey-y)+sum<min)
    {
        min=juedui(ex,x)*(ex-x)+juedui(ey,y)*(ey-y)+sum;
    }
    for(int i=0;i<N;i++)
    {

        if(vist[i]==0)
        {
            vist[i]=1;
            sum=sum+(juedui(x,map[i][0])*(x-map[i][0])+juedui(y,map[i][1])*(y-map[i][1])+map[i][4]);
            chuan(map[i][2],map[i][3]);
            sum=sum-(juedui(x,map[i][0])*(x-map[i][0])+juedui(y,map[i][1])*(y-map[i][1])+map[i][4]);
            sum=sum+(juedui(x,map[i][2])*(x-map[i][2])+juedui(y,map[i][3])*(y-map[i][3])+map[i][4]);
            chuan(map[i][0],map[i][1]);
            sum=sum-(juedui(x,map[i][2])*(x-map[i][2])+juedui(y,map[i][3])*(y-map[i][3])+map[i][4]);
            chuan(x,y);
            vist[i]=0;
        }
    }
}
int main()
{
    freopen("in.txt","r",stdin);
    int cass;
    scanf("%d",&cass);
    while(cass--)
    {
        min=9999;
        sum=0;
        scanf("%d",&N);
        scanf("%d %d %d %d",&sx,&sy,&ex,&ey);
        for(int i=0;i<N;i++)
        {
            vist[i]=0;
            for(int j=0;j<5;j++)
            {
                scanf("%d",&map[i][j]);
            }
        }
        chuan(sx,sy);
        printf("%d\n",min);
    }
    return 0;
}

 

posted on 2017-01-16 11:04  霸王程  阅读(111)  评论(0编辑  收藏  举报