サポートデータ構造として隣接行列を使用して、Cでいくつかのグラフアルゴリズムを実装しようとしています。重みを実数で表した重み付きグラフを実装する必要があります。
0と負の数がエッジの正しい重みであるとすると、2つのノード間にエッジがないことをどのように表すことができますか?
サポートデータ構造として隣接行列を使用して、Cでいくつかのグラフアルゴリズムを実装しようとしています。重みを実数で表した重み付きグラフを実装する必要があります。
0と負の数がエッジの正しい重みであるとすると、2つのノード間にエッジがないことをどのように表すことができますか?
数字()の代わりに次のdouble
ような構造を使用できます。
struct weight
{
double weight;
bool edge_exists;
};
の隣接行列を作成しますweight
。したがって、edge_exist
sがfalseの場合、をチェックする理由はありません。weight
そうでない場合weight
は意味があります。
every(?)double
が可能な重み値である可能性がある場合は、上記を使用します。
-1などの無意味な(すべての重みが正であると仮定していると思います)数値はどうですか?
これにより、コードが軽量になり(データ構造を追加する必要がなくなります)、覚えやすくなります。
C99以降を使用している場合は、INFINITY
で定義されたマクロを使用して、math.h
存在しないすべてのエッジに重みを割り当てることができますINFINITY
。
Cで無限大を使用する方法の詳細については、こちらをご覧ください:Cでnanとinfを使用する方法は?
(技術的にはNaNを使用することもできますが、定義が保証されているわけではなく、とにかく多くのアルゴリズムで無限大を使用した方がうまくいくと思います)