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

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

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

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1066閲覧

2部グラフ判定 (ファイルから頂点を読み込む)

fishQ

総合スコア3

グラフ理論

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/24 09:52

前提・実現したいこと

2部グラフ判定の問題を標準入力ではなくファイルからの読み込みにするプログラムを書いています。
主にpythonでのリストやリスト内包表記などの知識がなく迷っています。
現在pythonにて テキストファイルから1行毎にコンマで分けられたあたりを読み込み、それをmapを使用して変数に保存しようとしています。

input.txtはグラフの頂点を表しています。無向グラフなので向きはありません。
また辺や頂点の数はなく2点間の値のみです。

コマンドライン引数
python3 app.py input.txt

発生している問題・エラーメッセージ

ターミナルでプリントしてみるとコンマで分けられたstrタイプのlistなのでそれをただのintタイプに戻す必要があると考えています。 現在は標準入力で頂点の値をとっているのでinput.txtはコピーしてそれを使用してください。

app.py

import sys MAX_V = 10 file = open(sys.argv[1], "r") content = file.readlines()# it is stored in the list now print("リスト",content) edges = len(content) vertices = len(content) #content = list(map(int, content)) for i in range(0, len(content)): curr_line = content[i].split(',') print(curr_line) V = vertices # 頂点数 E = edges # 辺数 G = [[] for _ in range(MAX_V)] # グラフ for i in range(E): # sからtへの辺を張る s, t = map(int,input().split(',')) #s,t = map(int, ) G[s].append(t) G[t].append(s) color = [0] * MAX_V # 頂点iの色(1 or -1) 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("No") sys.exit() print("Yes")

###input.txt

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

試したこと

sからtへの辺を張るとコメントしてあるところでファイルから直接マップを使用してそれを2つの変数に保存しようとしますたができませんでした。

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

python 3.85

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

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

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

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

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

guest

回答1

0

ベストアンサー

データ1行分の処理は、 strip()で末尾の改行コードを削除して、split(',')でカンマ基準にリストに分解,
分解した頂点データをmap()で intに変換をしてみました。
forループは、range()で添字を作ってリストにアクセスしなくても、
リスト自体をイテレートする方がpythonらしくすっきり書けます。

python

1 省略 2 content = [map(int, line.strip().split(',')) for line in content] 3 4 V = vertices # 頂点数 5 E = edges # 辺数 6 G = [[] for _ in range(MAX_V)] # グラフ 7 for s, t in content: 8 # sからtへの辺を張る 9 G[s].append(t) 10 G[t].append(s) 11 12 color = [0] * MAX_V # 頂点iの色(1 or -1) 13 省略

投稿2021/04/24 10:16

hide5stm

総合スコア426

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

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

fishQ

2021/04/24 12:17

ありがとうございます。非常に便利ですね。とてもpythonらしいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問