質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
グラフ理論

グラフ理論とは、頂点(node)と辺(edge)で構成されたグラフに関する数学理論で、グラフの多様な性質を探求することを指します。グラフは、頂点と向き(矢印)を持つ辺で構成された有向グラフと、矢印のない無向グラフに分類。さまざまな日常の場面で使用することを目的としている理論です。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1030閲覧

2部グラフ判定 (標準出力)

fishQ

総合スコア3

グラフ理論

グラフ理論とは、頂点(node)と辺(edge)で構成されたグラフに関する数学理論で、グラフの多様な性質を探求することを指します。グラフは、頂点と向き(矢印)を持つ辺で構成された有向グラフと、矢印のない無向グラフに分類。さまざまな日常の場面で使用することを目的としている理論です。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/04/28 08:40

前提・実現したいこと

2部グラフ判定の問題をファイルからの読み込み、それを標準出力に判定して色の同じ頂点をコンマで分けて出力するプログラムを書いています。

現在、2部グラフの判定の部分は完成しましたがグラフが2部グラフだった場合の同じ色の頂点を正しく出力する部分にて止まっています。
ファイルの頂点は無向グラフです。

コマンドライン引数 
python3 bip.py input.txt
以下の標準出力はinput.txtをもとにした正しいものです。

###input.txt

0, 1 1, 2 3, 0 2, 3 4, 5

###標準出力

2部グラフ 0, 2 1, 3 4 5

この場合は0,1,2,3は一つのグラフで4,5がもう一つのかたまりです。
実装では1と−1ですが黒と白でここでは説明します。
同じグラフの中で黒が0と2 白が1,3。 また4,5は隣接しているためそれぞれ違う色です。

現在の標準出力

2部グラフ 0, 0 1, 0 1, 0 2, 0 4 5

4, 5は正しいですがそれ以外は間違っています。

bip.py

import sys MAX_V = 50 file = open(sys.argv[1], "r") content = file.readlines() content = [list(map(int, line.strip().split(','))) for line in content] #print(content) V = len(content) E = len(content) G = [[] for _ in range(MAX_V)] for s,t in content: G[s].append(t) G[t].append(s) #print(G) sortedG= sorted(G) #print(sortedG) color = [0] * MAX_V def dfs(v, c): color[v] = c for i in range(len(G[v])): if color[G[v][i]] == c: return False if color[G[v][i]] == 0 and not dfs(G[v][i], -c): return False return True for i in range(V): if color[i] == 0: if not dfs(i, 1): print("2部グラフではない") sys.exit() print("2部グラフ") for j in range(len(sortedG)): if len(sortedG[j]) == 1: print(sortedG[j][0]) else: last = 0 for k in range(len(sortedG[j]) - 1): print(sortedG[j][k], end =", ") last = k print(last)

補足情報(FW/ツールのバージョンなど)

python3.85

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問