C++でホイールグラフの直径・閉路数・辺数を求めるプログラム
はじめに
この記事では、ホイールグラフ(Wheel Graph)の頂点数が与えられたときに、その直径・閉路の数・辺の数を求めるC++プログラムの作成方法を解説します。
問題の概要: n個の頂点を持つホイールグラフについて、閉路の総数、辺の総数、そして直径を計算する必要があります。
ホイールグラフとは
まず、ホイールグラフの基本について理解しておきましょう。
ホイールグラフは、サイクルグラフ Cn-1 に新しい頂点を1つ追加することで得られるグラフです。この新しく追加された頂点はハブ(Hub)と呼ばれ、サイクル上のすべての頂点と接続されます。車輪のように見えることから「ホイールグラフ」という名前が付いています。
以下は、7つの頂点を持つホイールグラフの例です。

各用語の定義
ホイールグラフの直径
直径とは、ある頂点から別の頂点へ移動する際に通過する必要がある辺の本数の最大値です。上記のホイールグラフの場合、直径は2となります。
ホイールグラフの閉路の数
閉路の数とは、グラフ内に存在する閉じた経路(サイクル)の総数です。上記の7頂点のホイールグラフの場合、閉路の数は31になります。
ホイールグラフの辺の数
辺の数とは、すべての頂点を接続している辺の総数です。上記のホイールグラフの場合、辺の数は12本です。
解決アプローチ
この問題は、グラフ理論で知られている直接的な公式を使用することで効率的に解くことができます。ホイールグラフの性質から導かれた以下の公式を使いましょう。
直径の公式
頂点数が4の場合は1、それ以外の場合は2
閉路の数の公式
(頂点数)^2 − (3 × (頂点数 − 1))
辺の数の公式
2 × (頂点数 − 1)
プログラムの実装例
以下は、これらの公式を実装したC++プログラムです。
#include <iostream>
#include <math.h>
using namespace std;
void calcValuesWheelGraph(int V){
// 直径の計算
if(V == 4){
cout<<"ホイールグラフの直径は 1 "<<endl;
}
else {
cout<<"ホイールグラフの直径は 2 "<<endl;
}
// 閉路の数の計算
cout<<"ホイールグラフの閉路の数は "<<(pow(V, 2) - (3 * (V-1)))<<endl;
// 辺の数の計算
cout<<"ホイールグラフの辺の数は "<<(2 * (V-1))<<endl;
}
int main(){
int V = 9;
calcValuesWheelGraph(V);
return 0;
}
実行結果
ホイールグラフの直径は 2 ホイールグラフの閉路の数は 57 ホイールグラフの辺の数は 16
まとめ
このように、グラフ理論の公式を活用すれば、ホイールグラフの直径・閉路の数・辺の数を頂点数だけから簡単に計算できます。プログラムの計算量はO(1)であり、非常に効率的な解法となっています。9頂点の場合、直径は2、閉路の数は57、辺の数は16という結果が得られました。
-
C++で平行四辺形の面積を求めるプログラムの作成方法
この記事では、平行四辺形の底辺と高さを表す2つの値が与えられたとき、C++を使ってその面積を求めるプログラムを作成する方法を解説します。 平行四辺形とは? 平行四辺形とは、4つの辺からなる閉じた図形であり、向かい合う2組の辺がそれぞれ長さが等しく、互いに平行になっている四角形のことです。 問題を理解するための具体例 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積 = 底辺 × 高さ = 20 × 15 = 300 解決アプローチ この問題を解くには、平行四辺形の面積を求める幾何学の公式を使用します。 面積 = 底辺 × 高さ つまり、与えられた底辺と高さを掛け合わせ
-
Pythonのグラフでクリティカルエッジと疑似クリティカルエッジを見つける方法
問題の概要 頂点 0 から n − 1 までの番号が付いた n 個の頂点を持つ無向グラフが与えられ、各辺には重みが設定されているものとします。このグラフをもとに、最小全域木(MST)に含まれる「クリティカルエッジ」と「疑似クリティカルエッジ」を特定します。 クリティカルエッジとは、その辺を削除すると MST の総重みが増加してしまう辺のことです。一方、疑似クリティカルエッジとは、すべての MST に必ず含まれるわけではないものの、何らかの MST には現れ得る辺のことです。ここでは、入力として与えられたグラフに対して、該当する辺のインデックスを求めます。 たとえば、次のようなグラフが入力とし