前提・実現したいこと
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
あなたの回答
tips
プレビュー