C ++で、軸の原点を中心とする円内の(整数)グリッドの点を見つける問題をどのように解決しますか?結果は、中心からの距離のように、ノルム順に並べられていますか?
私は機能する実装を作成しました(ええ、私は知っています、それは非常に非効率的ですが、私の問題ではそれ以上のものはやり過ぎでしょう)。私はC++に非常に慣れていないので、私の最大の問題は、次の機能を備えたデータ構造を見つけることでした。
- ソート可能であること。
- 配列をその要素の1つに保存できること、
アルゴリズムの実装ではなく。私のコードは次のとおりです。みなさん、よろしくお願いします!
typedef std::pair<int, int[2]> norm_vec2d;
bool norm_vec2d_cmp (norm_vec2d a, norm_vec2d b)
{
bool bo;
bo = (a.first < b.first ? true: false);
return bo;
}
int energy_to_momenta_2D (int energy, std::list<norm_vec2d> *momenta)
{
int i, j, norm, n=0;
int energy_root = (int) std::sqrt(energy);
norm_vec2d temp;
for (i=-energy_root; i<=energy_root; i++)
{
for (j =-energy_root; j<=energy_root; j++)
{
norm = i*i + j*j;
if (norm <= energy)
{
temp.first = norm;
temp.second[0] = i;
temp.second[1] = j;
(*momenta).push_back (temp);
n++;
}
}
}
(*momenta).sort(norm_vec2d_cmp);
return n;
}