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;
}
#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
Building* abCoordinate = creatCoordinate(iBuilNum);
double* adDis = getAllDis(abCoordinate, iBuilNum, iDisNum, aiMinIndex);
// 输出所有坐标
printf("%s
", "所有建筑物的坐标为:");
for(i=0; i
", 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
", adDis[i]);
free(abCoordinate);
free(adDis);
return 0;
}
全部回答
- 1楼网友:动情书生
- 2021-01-12 12:07
根据你的要求,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息