大学1年生のレポートで困っている問題について

このQ&Aのポイント
  • 大学1年生のレポートで解けない問題があり困っています。どなたかお手伝いいただけると幸いです。
  • n個の頂点とm本の枝からなるグラフを表現するデータ構造の操作方法を設計し、プログラムを作成する問題です。
  • 頂点番号を指定すると、その頂点に隣接する全頂点の番号が列挙され、枝番号を指定するとその枝の両端点の頂点番号を求めることが要求されています。
回答を見る
  • ベストアンサー

大学1年生です。レポートに全く解けない問題があり困ってます。

大学1年生です。レポートに全く解けない問題があり困ってます。 どなたかお手伝いいただけると幸いです。 ---------------------------------------- n 個の頂点, m 本の枝からなるグラフを表現するデータ構造で, 以下の操作を実現するものを設計し,プログラムを作成しましょう. なお,頂点には 1,…,n の番号,枝には 1,…,m の番号が付いているとします. 【操作】 番号 i の頂点に隣接する全頂点の番号を列挙する 番号 j の枝の両端点の頂点番号を求める ---------------------------------------- 使用言語は不問だそうです。 不足している条件があれば適宜補っていただけると嬉しいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

> 上記内容を実現するための、何らかの言語で記述したプログラムのサンプルを作って頂けると、 > レポートの内容に直結し、より助かります。 ……大学のレポートですよね。そのくらい自分でやってください。これは意地悪で言っているのではなく、安易に答を聞くだけの宿題提出では大学の授業は確実についていけなくなるためです。 とりあえず前回の回答で書いたクラスをC++で作ったので、Node::GetNeighborIds()とBranch::GetEndIds()とをできる範囲でいいので書いてみてください。多分以下のサイトが参考になるでしょう。 http://www.kijineko.co.jp/tech/tr1/smart_pointers およびその先 http://www.kab-studio.biz/Programing/Codian/STL/06.html 内「map と multimap ( #24 )」の冒頭部分 その上でわからないことがあったら補足願います。 #include <vector> #include <utility> #include <memory> class Node; typedef std::tr1::shared_ptr<Node> PNode; typedef std::tr1::weak_ptr<Node> WPNode; class Branch; typedef std::tr1::shared_ptr<Branch> PBranch; typedef std::tr1::weak_ptr<Branch> WPBranch; // IntPair クラス typedef std::pair<int, int> IntPair; // 頂点クラス class Node { private:  int id_;  std::vector<WPBranch> branches_; public:  explicit Node(int id) : id_(id) {};  int GetId() const { return id_; };  void AddBranch(WPBranch branch) { branches_.push_back(branch); };  std::vector<int> GetNeighborIds() const; }; std::vector<int> Node::GetNeighborIds() const {  // 頂点に隣接する全頂点の番号を列挙する } // 枝クラス class Branch { private:  int id_;  WPNode end1_;  WPNode end2_; public:  Branch(int id, WPNode end1, WPNode end2) : id_(id), end1_(end1), end2_(end2) {};  int GetId() const { return id_; };  IntPair GetEndIds() const; }; IntPair Branch::GetEndIds() const {  // 枝の両端点の頂点番号を求める }

xynoxyno
質問者

お礼

hitomura様 この度は本当に丁寧な回答を下さりありがとうございました。 >……大学のレポートですよね。そのくらい自分でやってください。 >これは意地悪で言っているのではなく、安易に答を聞くだけの宿題提出では >大学の授業は確実についていけなくなるためです。 全く仰るとおりのご指摘で、私自身の怠慢を恥ずかしく思います。 この質問で初めてQ&Aサイトを利用しましたが、 お答え下さったのがhitomura様で大変良かったです。 hitomura様からは十分すぎるほどのヒントをいただきましたので、 後は出来る限りよいレポートとなるよう全力で取り組みます。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

自分の場合、まず以下のクラス図のようにクラスを設計します。図には描いていませんが、各クラスの番号・番号1・番号2のゲッターもあるものとします。 また、頂点クラスと枝クラスに対して、それぞれのインスタンスを保持し番号による検索が可能なものがあるものとします。これについてはいくつか方法がありますが本質的なものではないのでその実装は略します。 次に、以下の手順でデータの初期化を行います。 (1)1~n番の頂点について、対応する頂点インスタンスを作成する。 (2)1~m番の枝に対して、2個あるはずの端点の番号より頂点インスタンスをそれぞれ検索し、枝インスタンスを作成する。次に検索した2つの頂点インスタンスに対して今作成した枝インスタンスを追加する。 まず簡単な「番号 j の枝の両端点の頂点番号を求める」(端点番号の取得)から。 枝は端点となる頂点インスタンスへの参照を持っているので、それぞれのインスタンスから番号を取得し、その番号からIntPairインスタンスを生成して返します。 次に「番号 i の頂点に隣接する全頂点の番号を列挙する」(近隣頂点番号の取得)を。 頂点はその頂点を端点とする枝への参照を保持していますので、それぞれのインスタンスに対して「端点番号の取得」を呼び出します。そして帰ってきたIntPairインスタンスが保持する2つの番号について、自身の番号と異なるものを記憶していきます。 すべての枝インスタンスに対して上記の処理が終わったならば記憶していた番号を結果として返します。 上記およびクラス図でわからないことがあれば補足願います。

xynoxyno
質問者

補足

hitomura様 非常に丁寧な回答で、本当に助かります。 クラス図という概念を始めて知りましたので、 自習してクラス図の読み方を(なんとなくではありますが)理解するに至りました。 プログラムを書く元となる“設計図”のような感じでしょうか。 hitomura様のお陰で、今回のレポートで求められているプログラムの 動作原理を把握することが出来て、とても助かりました。 現在の私にはそれを実現するためのプログラムを組む力が不足していますので、 上記内容を実現するための、何らかの言語で記述したプログラムのサンプルを作って頂けると、 レポートの内容に直結し、より助かります。 どうかよろしくお願いします。

関連するQ&A

  • ケー二スバルグの橋の問題(一筆書き)

    以前、他の方が、聞いてましたが、もっと具体的にケー二スバルグの橋の問題(一筆書き)を。 (1) 連結な平面グラフの各頂点が偶数個の辺に隣接している⇒ 連結な平面グラフは、同一の始点・終点を持つように一筆書き可能である。 (2) 連結な平面グラフのちょうど2つの頂点が奇数個の辺に隣接し、残りのすべての頂点は、偶数個の辺に隣接している⇒連結な平面グラフは異なる始点・終点をもつように一筆書き可能 (1)、(2)をそれぞれ、数学的帰納法を用いて、証明したいんです。自分でやってみたんですが、うまくいかないんです。 力を貸して頂けないでしょうか? どなたか教えていただけないでしょうか?

  • グラフ理論の問題について

    Gをn個の頂点とM本の辺を含む、以下の条件を満たすグラフとします。 このグラフの全ての辺をk通りの異なる色に彩色したとき、そのうち任意のm個の異なる色が選ばれたとしても残りのk-m色のみで塗られた辺によって出来た部分グラフが連結であるような彩色の仕方が存在する。 ここでk,n,mをパラメーターとした時、「最小の」Mの値を求めたいのですが、m=1の時の解しか得られませんでした。どのようなグラフ理論的なテクニックを用いてこの問題を解くべきなのでしょうか?この種の問題は一般的にグラフ彩色の問題として分類されるのでしょうか?なにか一般解を得るためのヒントや手助けとなりそうなアイディアや論文などありましたらお教え願いたいです。

  • 一筆書き可能の証明

    ケー二スバルグの橋の問題から、下のことが出てきました。 (1) 連結な平面グラフの各頂点が偶数個の辺に隣接している⇒ 連結な平面グラフは、同一の始点・終点を持つように一筆書き可能である。 (2) 連結な平面グラフのちょうど2つの頂点が奇数個の辺に隣接し、残りのすべての頂点は、偶数個の辺に隣接している⇒連結な平面グラフは異なる始点・終点をもつように一筆書き可能 (1)、(2)をそれぞれ、証明したいのですが、なかなかできません。 どなたか教えていただけないでしょうか?

  • 2次関数の最大・最小

    2次関数の最大・最小 aが実数として、a<=x<=a+2で定義される関数f(x)=x^2-2x+3がある。この関数の最大値、最小値をそれぞれM(a),m(a)とするとき、関数b=M(a),b=m(a)のグラフをab平面に(別々に)書け。 最大・最小となる候補を利用 y=d(x-p)^2+qのグラフが下に凸の場合、 ・区間α<=x<=βにおける最小値は、x=pが区間内であれば、頂点のy座標q そうでなければ、区間の端点でのf(α),f(β)のうち小さいほう ・区間α<=x<=βにおける最大値は、区間の端点での値f(α),f(β)のうちの大きいほう である。結局、「最大値や最小値にbなる可能性のある点は、頂点と両端の点の3つのみ」であるから、 「頂点のy座標(頂点が区間内にあるとき)、および区間の端点のy座標からなる3つのグラフを描いておき、最も高いところをたどったものが最大値のグラフ、最も低いものをたどったものが最小値のグラフである。 教えてほしいところ 「最大値や最小値にbなる可能性のある点は、頂点と両端の点の3つのみ」であるのは理解できます。しかし、 「頂点のy座標(頂点が区間内にあるとき)、および区間の端点のy座標からなる3つのグラフを描いておき、最も高いところをたどったものが最大値のグラフ、最も低いものをたどったものが最小値のグラフである。という部分が理解できません。 何故、たどったものがそれぞれ最大値または最小値のグラフだといえるんですか?? 論理的に教えてください

  • 情報数学の問題。

    試験問題の範囲内の問題なのですが、解答が無いので教えてください。 n個の頂点を持つ有限グラフGに対し、次は同値である。 (ⅰ)Gは木である。 (ⅱ)Gはサイクルを持たず、n-1本の辺を持つ。 (ⅲ)Gは連結であり、n-1本の辺を持つ。  (1)(ⅰ)→(ⅱ)  (2)(ⅱ)→(ⅲ)  (3)(ⅲ)→(ⅰ) 個の3問の問題をどうかお願いします。

  • ハミルトングラフ

    ハミルトングラフになるときって、頂点がn個で、任意の二つの点v,w隣接してないとき deg(v)+deg(w)≧n なんで、 つまり頂点vとwの次数の合計がn以上なら、成り立つんですよね? でも閉路グラフC6の時って、どの頂点でも 2+2≦6 になるのにハミルトングラフなんですよね? ハミルトングラフってどんなときになるんですか?

  • 確率 (粒子が四面体を進む)の問題

    「1辺の長さが1の正四面体ABCDの辺上を、いくつかの粒子が次の規則にしたがって毎秒1の速さで運動している 規則1:各粒子は辺の途中で向きを変えることはなく、ある頂点を出発した粒子はちょうど1秒後に別の頂点に達する。 規則2:各粒子は頂点に達するとその頂点を端点とする3辺のいずれかにそれぞれ確率1/3で進む 規則3:粒子同士は辺の途中で正面衝突しても互いにすり抜けてそのまま進むが、同一頂点に2個以上の粒子が同時に達するとそれらは瞬時に合体し以後は1個の粒子として運動する 今、ちょうど3個の粒子が存在し、それぞれ頂点ABCに同時に達したところである。(n+0.1)秒後にちょうどk個の粒子が存在する確率をPk(n)とするとき以下の問いに答えよ (1)P1(1)、P2(1)、P3(1)を求めよ (2)ちょうどn秒後に粒子が3個から2個になる確率Q(n)を求めよ。 (3)P2(n)、P1(n)を求めよ」 という問題を解いています。 こういう確率の問題は学校でやったことがなく、初めてなのでなんだか難しいです。 3つの粒子を同時に動かすのを考えるのが大変です。 それぞれ「次はこの点に動く」とか考えると場合分けがありすぎるような気がするのですが、何かうまい方法はあるのでしょうか? 教えていただければありがたいです。宜しくお願いします

  • 高校数学です(>_<) 2次関数の問題です。

    初歩的なところで行き詰まってしまいました・・・(>_<) いろいろと考えたのですが・・・ 解ける方がいらっしゃったら、御解答よろしくおねがいします!!! <問題> m, nを自然数とし、2次関数y=x^2-2mx-nのグラフをCとする。 (1)グラフCの頂点が放物線y=-x^2+3x-5上にあるとき、mの値とnの値を求めよ。

  • センター試レベルの数学(二次関数)の問題

    m,nを自然数とし、2次関数y=x2(xの二乗)-2mx-nのグラフをcとする。 (1)グラフcの頂点が放物線y=-x2(xの二乗)+3x-5にあるとき、m={ア}、n={イ}である。 このとき、ぐらふcはx軸から長さ{ウ}√{エ}の線分を切り取る。 (2)グラフcがx軸から長さ4の線分を切り取るとき、m={オ}、n={カ}である。                         春休みの宿題なんですけど、全然解けないので、やり方を教えてください!

  • 対角線が通過する正方形の数(中学入試問題)

    正方形を横にm個、縦にn個並べて、長方形を作ります。 そのできた長方形の対角線が通過する正方形の数を求める問題です。 mとnが互いに素の時、長方形の対角線は正方形の頂点を通過することがないみたいですが、 なぜだか説明できません。 どなたかこのことをうまく説明できる方がいましたら教えてください。 よろしくお願いします。

専門家に質問してみよう