中易网

C语言课设,最近点对问题,求大神用分治法做出来,图片是具体要求,谢谢😜

答案:2  悬赏:60  
解决时间 2021-01-13 10:43
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-01-12 11:31
C语言课设,最近点对问题,求大神用分治法做出来,图片是具体要求,谢谢😜
最佳答案
  • 二级知识专家网友:春色三分
  • 2021-01-12 12:01
#include
#include
#include
#include

typedef struct
{
    double x;
    double y;
}Building;

// 创建所有建筑的坐标
Building* creatCoordinate(int iBuilNum)
{
    int i, j;
    double x, y;
    srand((int)time(NULL));
    Building* bBuil = (Building*)malloc(sizeof(Building)*iBuilNum);
    for(i=0; i    {
        x = (rand()%10000)*0.01;
        y = (rand()%10000)*0.01;
        for(j=0; j        {
            if(x == bBuil[j].x && y == bBuil[j].y)
            {
                i --;
                continue;
            }
        }
        bBuil[i].x = x;
        bBuil[i].y = y;
    }

    return bBuil;
}

// 求两点间的距离
double getDis(Building bA, Building bB)
{
    double dDifferenceX = bA.x - bB.x;
    double dDifferenceY = bA.y - bB.y;
    return sqrt(dDifferenceX*dDifferenceX + dDifferenceY*dDifferenceY);
}

// 求所有点间的距离
double* getAllDis(Building* abCoordinate, int iBuilNum, int iDisNum, int* aiMinIndex)
{
    int i, j, k;
    double dMin = 1000.0;
    double* adDis = (double*)malloc(sizeof(double)*iDisNum);
    for(i=iBuilNum-1, k=0; i>0; i--)
    {
        for(j=i; j>0; j--)
        {
            //printf("%d %d
", iBuilNum-i-1, iBuilNum-j);
            adDis[k] = getDis(abCoordinate[iBuilNum-i-1], abCoordinate[iBuilNum-j]);
            // 截取最小距离
            if(adDis[k] < dMin)
            {
                dMin = adDis[k];
                // 截取最小距离相应坐标数组的下标
                aiMinIndex[0] = iBuilNum-i-1;
                aiMinIndex[1] = iBuilNum-j;
            }
            k++;
        }
    }

    return adDis;
}

int main(void)
{
    int iBuilNum, iDisNum = 0, aiMinIndex[2], i;
    printf("%s
", "请输入建筑物数量:");
    scanf("%d", &iBuilNum);
    for(i=1; i        iDisNum += i;

    Building* abCoordinate = creatCoordinate(iBuilNum);
    double* adDis = getAllDis(abCoordinate, iBuilNum, iDisNum, aiMinIndex);

    // 输出所有坐标
    printf("%s
", "所有建筑物的坐标为:");
    for(i=0; i        printf("x: %0.2lf    y: %0.2lf
", abCoordinate[i].x, abCoordinate[i].y);

    // 输出距离最近两个点的坐标
    printf("%s
", "距离最近两个建筑物的坐标为:");
    printf("x: %0.2lf    y: %0.2lf
", abCoordinate[aiMinIndex[0]].x, abCoordinate[aiMinIndex[0]].y);
    printf("x: %0.2lf    y: %0.2lf
", abCoordinate[aiMinIndex[1]].x, abCoordinate[aiMinIndex[1]].y);

    // 输出距离最近两个点的距离
    printf("%s
", "距离最近两个建筑物的距离为:");
    printf("%0.2lf
", getDis(abCoordinate[aiMinIndex[0]], abCoordinate[aiMinIndex[1]]));

    // 输出所有距离
    //printf("%s
", "所有建筑物的距离为:");
    //for(i=0; i    //    printf("%0.2lf
", adDis[i]);

    free(abCoordinate);
    free(adDis);

    return 0;
}
全部回答
  • 1楼网友:动情书生
  • 2021-01-12 12:07
根据你的要求,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息