Leetcode.1620.网络信号最好的坐标

本文介绍了一个算法,该算法通过计算特定范围内的所有可能坐标点来找到接收信号强度最大的坐标位置。通过对每个信号塔发射的信号进行距离加权计算,确定了在给定半径内哪个坐标点能够获得最强的总信号强度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
#define MAX(a, b) ((a) > (b) ? (a) : (b))
//距离计算
static int mysqrt(int *tower1, int *tower2)
{
    return (tower1[0] - tower2[0]) * (tower1[0] - tower2[0]) + (tower1[1] - tower2[1]) * (tower1[1] - tower2[1]);
}


int* bestCoordinate(int** towers, int towersSize, int* towersColSize, int radius, int* returnSize){
    int *ans = (int *)malloc(sizeof(int) * 2);
    memset(ans, 0, sizeof(ans));
    *returnSize = 2;
    int max = 0;//初始化
    for(int i = 0; i <= 50; ++i) {
        for(int j = 0; j <= 50; ++j) {//枚举所有点
            int sum = 0;
            int d = 0;
            int temp[2] = {i,j};
            for(int j = 0; j < towersSize; ++j) {//枚举所有信号塔
                if((d = mysqrt(temp, towers[j])) <= radius * radius) {
                    sum += (int)(towers[j][2] / (1 + pow(d,0.5)));//累加所有信号值
                }
            }
            if(max < sum)
            {//保存最大小标
                memcpy(ans, temp, sizeof(temp));
                max = sum;
            }
        }

    }
    return ans;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值