📅  最后修改于: 2023-12-03 15:28:03.743000             🧑  作者: Mango
在图论中,每个节点都有一个与之相关联的权重。在本题中,我们需要计算这些节点权重的平方根是否为整数,若是,则该节点的权重为完美平方。
假设节点 $i$ 的权重为 $w_i$,如果 $w_i$ 是完美平方,那么 $\sqrt{w_i}$ 必定是整数。因此我们可以依次枚举每个节点的权重 $w_i$,并计算其平方根是否为整数,若是,则该节点的权重为完美平方。
具体实现可以采用语言自带的数学计算库,如 Python 中的 math 库,C++ 中的 cmath 库等。
import math
def find_perfect_squares(weights):
"""
返回权重为完美平方的节点列表
:param weights: 节点权重列表
:return: 权重为完美平方的节点列表
"""
perfect_squares = []
for i, w in enumerate(weights):
if math.sqrt(w) == int(math.sqrt(w)):
perfect_squares.append(i)
return perfect_squares
#include <iostream>
#include <vector>
#include <cmath>
std::vector<int> find_perfect_squares(std::vector<int>& weights) {
/*
* 返回权重为完美平方的节点列表
* :param weights: 节点权重列表
* :return: 权重为完美平方的节点列表
*/
std::vector<int> perfect_squares;
for (int i = 0; i < weights.size(); i++) {
if (sqrt(weights[i]) == floor(sqrt(weights[i]))) {
perfect_squares.push_back(i);
}
}
return perfect_squares;
}
int main() {
std::vector<int> weights = {1, 2, 4, 16, 25};
std::vector<int> perfect_squares = find_perfect_squares(weights);
for (auto i: perfect_squares) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
本题中,我们介绍了算法思路,并给出了 Python 和 C++ 的代码实现。在实际开发中,需要根据项目需求选择合适的语言和库进行开发。 (211字)