私の質問は、次の状況でビットマップを実装する方法ですか?
グラフの頂点が最小スパニング ツリー (MST) にある場合は、対応するビットをマークします。後でビットをチェックして、MST にあるかどうかをチェックします。
当初、私は使用することを考えていました
typedef struct bit_t{
char bit0:1;
} bit;
bit bitmap[num_of_vertex];
ビットマップ配列を使用してビットを記録します。
しかし、次に sizeof (bitmap[num_of_vertex]) が num_of_vertex バイトであり、num_of_vertex/8 バイトではないことがわかりました。そのため、思ったほどスペースを節約できません。
これまでのところ私は使用しています
long bit_record = 0;
...
bit_record |= 1<< u;//set vertex as in MST
...
その後、次を使用して頂点が MST にあるかどうかを確認します。
static bool is_in_MST(int v, int bit_record){
int mask = 1 << v;
if (mask & bit_record)
return true;
else
return false;
}
コードは機能しますが、num_of_vertex が 32 より大きい場合は機能しません。
上記の状況で一般的にビットマップはどのように実装されますか?