Last active
August 29, 2015 14:11
-
-
Save showa-yojyo/94d7ca81fbcbeb1c23ff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
"""dq8pot.py: demonstrate MultiDiGraph and related features. | |
""" | |
import networkx as nx | |
import matplotlib.pyplot as plt | |
from matplotlib.font_manager import FontProperties | |
from matplotlib.text import Text | |
from itertools import groupby | |
def main(): | |
G = setup_recipe() | |
#dump_nodes(G) | |
dump_strongly_connected_components(G) | |
#render_graph(G) | |
def setup_recipe(): | |
def add_recipe(G, target, *sources): | |
for s, g in groupby(sorted(sources)): | |
G.add_edge(s, target, weight=len(list(g))) | |
G = nx.MultiDiGraph() | |
add_recipe(G, '上やくそう', 'やくそう', 'やくそう') | |
add_recipe(G, '特やくそう', '上やくそう', '上やくそう') | |
add_recipe(G, 'いやし草', 'やくそう', 'やくそう', 'やくそう') | |
add_recipe(G, 'いやし草', 'やくそう', '上やくそう') | |
add_recipe(G, 'アモールの水', 'せいすい', '上やくそう') | |
add_recipe(G, '上どくけし草', 'やくそう', 'どくけし草') | |
add_recipe(G, '特どくけし草', 'やくそう', 'どくけし草', 'どくけし草') | |
add_recipe(G, '特どくけし草', '上どくけし草', '上どくけし草') | |
add_recipe(G, 'きつけ草', 'やくそう', 'やくそう', 'まんげつ草') | |
add_recipe(G, 'きつけ草', 'まんげつ草', '上やくそう') | |
add_recipe(G, '月のめぐみ', 'まんげつそう', 'まんげつそう', 'まんげつそう') | |
add_recipe(G, '万能ぐすり', '特やくそう', '特やくそう') | |
add_recipe(G, '超万能ぐすり', '万能ぐすり', 'いやし草', 'きつけ草') | |
add_recipe(G, '超万能ぐすり', '特やくそう', '特やくそう', '特やくそう') | |
add_recipe(G, 'せかいじゅのしずく', 'せかいじゅの葉', 'まほうのせいすい') | |
add_recipe(G, 'まほうのせいすい', 'せいすい', 'ふしぎなきのみ') | |
add_recipe(G, 'エルフの飲み薬', 'まほうのせいすい', 'せかいじゅのしずく') | |
add_recipe(G, 'せいすい', 'アモールの水', '岩塩') | |
add_recipe(G, 'キメラのつばさ', 'こうもりのはね', 'こうもりのはね') | |
add_recipe(G, 'おかしな薬', 'せいすい', 'こうもりのはね', 'うしのふん') | |
add_recipe(G, 'おかしな薬', 'やくそう', 'どくけし草', 'まんげつ草') | |
add_recipe(G, '賢者の石', '金塊', 'オリハルコン', 'せかいじゅのしずく') | |
add_recipe(G, 'ふしぎなタンバリン', '太陽のかんむり', 'まじゅうの皮', '怒りのタトゥー') | |
add_recipe(G, 'ふつうのチーズ', 'おいしいミルク', 'レンネットのこな') | |
add_recipe(G, 'ふつうのチーズ', '超辛チーズ', 'かがやくチーズ') | |
add_recipe(G, '辛口チーズ', 'ふつうのチーズ', '赤いカビ') | |
add_recipe(G, '激辛チーズ', '辛口チーズ', 'あかいカビ', 'あかいカビ') | |
add_recipe(G, '超辛チーズ', '激辛チーズ', 'ごくじょうのカビ', 'ドラゴンのふん') | |
add_recipe(G, '冷たいチーズ', 'ふつうのチーズ', 'みず草のカビ') | |
add_recipe(G, 'こおりのチーズ', '冷たいチーズ', 'みず草のカビ') | |
add_recipe(G, 'こごえるチーズ', 'こおりのチーズ', 'みず草のカビ', 'みず草のカビ') | |
add_recipe(G, 'かがやくチーズ', 'こごえるチーズ', 'ごくじょうのカビ', 'ドラゴンのふん') | |
add_recipe(G, 'いやしのチーズ', 'ふつうのチーズ', 'アモールの水') | |
add_recipe(G, 'ベホマラチーズ', 'おいしいミルク', 'ごくじょうのカビ', 'アモールの水') | |
add_recipe(G, '天使のチーズ', 'おいしいミルク', 'ごくじょうのカビ', 'せかいじゅのしずく') | |
add_recipe(G, 'かちかちチーズ', 'ふつうのチーズ', '岩塩') | |
add_recipe(G, 'やわらかチーズ', 'おいしいミルク', 'レンネットのこな', '岩塩') | |
add_recipe(G, 'フバフバチーズ', 'ふつうのチーズ', 'まほうのせいすい') | |
add_recipe(G, 'はりきりチーズ', '激辛チーズ', 'こごえるチーズ', '岩塩') | |
add_recipe(G, 'ごくじょうのカビ', 'あかいカビ', 'みず草のカビ', 'せかいじゅの葉') | |
add_recipe(G, '盗賊の鍵', '鉄のクギ', 'ブロンズナイフ') | |
add_recipe(G, 'どうのつるぎ', 'ブロンズナイフ', 'ブロンズナイフ') | |
add_recipe(G, '古びたつるぎ', 'はぐれメタルの剣', 'おかしな薬', 'うしのふん') | |
add_recipe(G, '聖銀のレイピア', 'テンペラーソード', 'まよけの聖印') | |
add_recipe(G, 'はやぶさの剣・改', 'はやぶさの剣', 'ほしふる腕輪') | |
add_recipe(G, '堕天使のレイピア', '聖銀のレイピア', 'あくまのしっぽ', 'こうもりのはね') | |
add_recipe(G, 'ゾンビバスター', 'ゾンビキラー', 'まよけの聖印') | |
add_recipe(G, 'もろはのつるぎ', 'もろはのつるぎ・改', 'あくまのしっぽ') | |
add_recipe(G, 'もろはのつるぎ・改', 'もろはのつるぎ', '聖者の灰', '聖者の灰') | |
add_recipe(G, '疾風のレイピア', '堕天使のレイピア', 'しっぷうのバンダナ', 'しっぷうのバンダナ') | |
add_recipe(G, 'ドラゴンスレイヤー', 'ドラゴンキラー', 'ごうけつのうでわ') | |
add_recipe(G, 'ふぶきのつるぎ', 'バスターソード', 'こおりのやいば', 'こごえるチーズ') | |
add_recipe(G, 'きせきのつるぎ・改', 'きせきの剣', '命のブレスレット') | |
add_recipe(G, 'ライトシャムシール', 'ルーンスタッフ', 'ライトシールド', 'ひかりのドレス') | |
add_recipe(G, 'はぐれメタルの剣', '古びたつるぎ', 'スライムのかんむり', 'オリハルコン') | |
add_recipe(G, '鉄のヤリ', 'ひのきのぼう', 'ダガーナイフ') | |
add_recipe(G, 'ロングスピア', '鉄のヤリ', 'ひのきのぼう', 'ひのきのぼう') | |
add_recipe(G, 'ホーリーランス', 'ロングスピア', '金のロザリオ') | |
add_recipe(G, '砂塵のヤリ', 'パルチザン', '聖者の灰') | |
add_recipe(G, 'デーモンスピア', 'バトルフォーク', 'どくばり', 'あくまのしっぽ') | |
add_recipe(G, 'ハイブーメラン', 'ブーメラン', '鉄のクギ') | |
add_recipe(G, 'ウイングエッジ', 'やいばのブーメラン', 'こうもりのはね', 'はがねのかま') | |
add_recipe(G, '炎のブーメラン', 'ツインスワロー', '炎の盾') | |
add_recipe(G, 'メタルウイング', 'ウイングエッジ', 'メタルキングのヤリ') | |
add_recipe(G, '石のオノ', '石のぼうし', 'ひのきのぼう') | |
add_recipe(G, '金のオノ', '鉄のオノ', '金塊') | |
add_recipe(G, '鉄のオノ', '鉄のかま', '鉄のかま') | |
add_recipe(G, 'さんぞくのオノ', 'とうぞくのかぎ', 'バトルアックス') | |
add_recipe(G, 'ムーンアックス', '金のオノ', '月のめぐみ') | |
add_recipe(G, 'キングアックス', '金のオノ', 'スライムのかんむり') | |
add_recipe(G, '大かなづち', '大きづち', '鉄かぶと', '鉄かぶと') | |
add_recipe(G, 'ウォーハンマー・改', 'ウォーハンマー', 'ごうけつの腕輪') | |
add_recipe(G, 'メガトンハンマー', 'ウォーハンマー・改', 'はおうのオノ', 'オリハルコン') | |
add_recipe(G, 'じごくのおおかま', 'はがねのかま', 'どくがのナイフ', 'サタンヘルム') | |
add_recipe(G, 'キラーピアス', 'スライムピアス', '怒りのタトゥー', 'はやてのリング') | |
add_recipe(G, 'アサシンダガー', 'イーグルダガー', 'どくばり') | |
add_recipe(G, 'こあくまのナイフ', 'アサシンダガー', 'あくまのしっぽ') | |
add_recipe(G, '皮のムチ', 'あくまのしっぽ', '聖者の灰') | |
add_recipe(G, 'ヘビ皮のムチ', '皮のムチ', 'うろこの盾') | |
add_recipe(G, 'ドラゴンテイル', 'ヘビ皮のムチ', '竜のうろこ', '竜のうろこ') | |
add_recipe(G, 'あくまのムチ', 'バスターウィップ', 'あくまのしっぽ') | |
add_recipe(G, 'バスターウィップ', 'あくまのムチ', '聖者の灰') | |
add_recipe(G, 'マグマの杖', 'まどうしの杖', 'ばくだん岩のかけら', 'ばくだん岩のかけら') | |
add_recipe(G, 'まふうじの杖', 'まどうしの杖', 'ルーンスタッフ') | |
add_recipe(G, 'ふっかつの杖', 'ルーンスタッフ', '命のブレスレット', 'せかいじゅの葉') | |
add_recipe(G, 'クロスボウ', '力の指輪', 'ひのきのぼう', 'ひのきのぼう',) | |
add_recipe(G, 'クロスボウ', 'ショートボウ', 'チェーンクロス') | |
add_recipe(G, 'エロスの弓', 'クロスボウ', 'ガーターベルト') | |
add_recipe(G, 'ケイロンの弓', 'エロスの弓', '力の盾') | |
add_recipe(G, 'オーディーンボウ', 'ケイロンの弓', 'エロスの弓', 'ビッグボウガン') | |
add_recipe(G, 'たびびとの服', '布の服', '布の服') | |
add_recipe(G, 'ステテコパンツ', 'とうぞくのこしみの', 'バンダナ') | |
add_recipe(G, '皮のよろい', 'たびびとの服', 'まじゅうの皮') | |
add_recipe(G, '皮のこしまき', 'ステテコパンツ', 'まじゅうの皮') | |
add_recipe(G, '騎士団の服', 'たびびとの服', '騎士団の盾') | |
add_recipe(G, '皮のドレス', 'おどりこのふく', 'まじゅうの皮') | |
add_recipe(G, 'うろこのよろい', '皮のよろい', '竜のうろこ') | |
add_recipe(G, 'くさりかたびら', 'たびびとのふく', 'チェーンクロス') | |
add_recipe(G, 'せいどうのよろい', 'せいどうの盾', 'くさりかたびら') | |
add_recipe(G, '鉄のむねあて', '鉄の盾', '鉄の盾') | |
add_recipe(G, '毛皮のポンチョ', 'まじゅうの皮', 'まじゅうの皮') | |
add_recipe(G, 'やすらぎのローブ', 'みかわしの服', 'ステテコパンツ') | |
add_recipe(G, 'バニースーツ', 'シルクのビスチェ', 'うさぎのしっぽ') | |
add_recipe(G, 'ゾンビメイル', 'シルバーメイル', 'ゾンビキラー', 'プラチナメイル', 'あくまのしっぽ') | |
add_recipe(G, '銀のむねあて', '鉄のむねあて', 'シルバートレイ', 'シルバートレイ') | |
add_recipe(G, 'けんじゃのローブ', 'まほうの法衣', 'インテリハット') | |
add_recipe(G, 'マジカルスカート', 'マジカルハット', 'マジカルメイス', 'とうぞくのこしみの') | |
add_recipe(G, 'まほうのよろい', 'はがねのよろい', 'いのりの指輪', 'まもりのルビー') | |
add_recipe(G, 'ダンシングメイル', 'おどりこの服', 'シルバーメイル') | |
add_recipe(G, 'ドラゴンメイル', 'シルバーメイル', '竜のうろこ', '竜のうろこ') | |
add_recipe(G, 'ひかりのドレス', 'スパンコールドレス', 'まもりのルビー', '金のブレスレット') | |
add_recipe(G, 'やいばのよろい', 'まほうのよろい', 'やいばのブーメラン') | |
add_recipe(G, 'プラチナメイル', 'ゾンビメイル', '聖者の灰') | |
add_recipe(G, '天使のローブ', 'みずのはごろも', 'マジカルスカート') | |
add_recipe(G, '紅蓮のローブ', 'けんじゃのローブ', 'まほうのせいすい', 'ヌーク草') | |
add_recipe(G, 'バンデットメイル', 'あつでのよろい', 'さんぞくのオノ', 'とうぞくのこしみの') | |
add_recipe(G, 'やみのころも', 'みかわしの服', 'こうもりのはね', 'あくまのしっぽ') | |
add_recipe(G, 'ミラーアーマー', 'シルバーメイル', 'ミラーシールド', 'ミラーシールド') | |
add_recipe(G, 'プリンセスローブ', '天使のローブ', 'ひかりのドレス', '金のロザリオ') | |
add_recipe(G, 'ギガントアーマー', 'バンデットメイル', 'ごうけつのうでわ', 'ごうけつのうでわ') | |
add_recipe(G, 'しんぴのビスチェ', 'あぶないビスチェ', 'ひかりのドレス') | |
add_recipe(G, 'メタルキングよろい', 'はぐれメタルよろい', 'スライムのかんむり', 'オリハルコン') | |
add_recipe(G, '皮のたて', 'まじゅうの皮', 'なべのふた') | |
add_recipe(G, 'うろこの盾', '皮の盾', '竜のうろこ') | |
add_recipe(G, 'せいどうの盾', '皮の盾', 'ブロンズナイフ') | |
add_recipe(G, '騎士団の盾', '鉄の盾', '騎士団の服') | |
add_recipe(G, 'ホワイトシールド', '鉄の盾', 'シルバートレイ', 'ライトシールド', 'おいしいミルク', 'おいしいミルク') | |
add_recipe(G, 'まほうの盾', 'はがねの盾', 'いのりの指輪', 'まもりのルビー') | |
add_recipe(G, 'ドラゴンシールド', 'はがねの盾', '竜のうろこ', '竜のうろこ') | |
add_recipe(G, 'こおりの盾', 'まほうの盾', 'こおりのやいば') | |
add_recipe(G, 'ほのおの盾', 'まほうの盾', '炎のブーメラン') | |
add_recipe(G, '力の盾', 'まほうの盾', '力の指輪', 'ベホマラチーズ') | |
add_recipe(G, '聖女の盾', 'ミラーシールド', 'ホワイトシールド', 'せいすい') | |
add_recipe(G, 'みかがみの盾', 'ミラーシールド', 'アモールの水', 'まほうのせいすい') | |
add_recipe(G, 'はめつの盾', 'メタルキングの盾', 'あくまのしっぽ') | |
add_recipe(G, '死神の盾', '女神の盾', 'あくまのしっぽ') | |
add_recipe(G, '女神の盾', '死神の盾', '聖者の灰') | |
add_recipe(G, 'メタルキングの盾', 'はめつの盾', '聖者の灰', 'オリハルコン') | |
add_recipe(G, 'とんがりぼうし', 'かわのぼうし', '鉄のクギ') | |
add_recipe(G, 'ターバン', 'バンダナ', 'バンダナ') | |
add_recipe(G, 'はねぼうし', 'かわのぼうし', 'キメラのつばさ') | |
add_recipe(G, 'うさみみバンド', 'うさぎのしっぽ', 'ヘアバンド') | |
add_recipe(G, '石のぼうし', '石のオノ', 'とんがりぼうし') | |
add_recipe(G, '毛皮のフード', 'はねぼうし', '毛皮のポンチョ') | |
add_recipe(G, 'かぜのぼうし', 'はねぼうし', 'しっぷうのバンダナ') | |
add_recipe(G, 'ブロンズキャップ', '石のぼうし', 'ブロンズナイフ', 'ブロンズナイフ') | |
add_recipe(G, 'しっぷうのバンダナ', 'はやてのリング', 'バンダナ') | |
add_recipe(G, '銀のかみかざり', 'サンゴのかみかざり', 'シルバートレイ') | |
add_recipe(G, 'しあわせのぼうし', 'はねぼうし', 'しあわせのくつ') | |
add_recipe(G, 'インテリハット', 'マジカルハット', 'インテリメガネ') | |
add_recipe(G, 'サタンヘルム', 'ミスリルヘルム', 'あくまのしっぽ') | |
add_recipe(G, '知力のかぶと', 'インテリハット', 'アイアンヘッドギア') | |
add_recipe(G, 'ミスリルヘルム', 'サタンヘルム', '聖者の灰') | |
add_recipe(G, '猛牛ヘルム', 'ミスリルヘルム', 'うしのふん', 'おいしいミルク') | |
add_recipe(G, '黄金のティアラ', '知力のかぶと', '銀のかみかざり', '金塊') | |
add_recipe(G, 'ファントムマスク', 'アイアンヘッドギア', 'やみのころも') | |
add_recipe(G, 'ドクロのかぶと', '太陽のかんむり', 'あくまのしっぽ') | |
add_recipe(G, '太陽のかんむり', 'ドクロのかぶと', '聖者の灰') | |
add_recipe(G, '力の指輪', 'いのりの指輪', '力のたね') | |
add_recipe(G, 'パワーベルト', '皮のこしまき', '力の指輪') | |
add_recipe(G, 'ごうけつの腕輪', '力の指輪', 'パワーベルト') | |
add_recipe(G, '命のブレスレット', '命の指輪', '金のブレスレット') | |
add_recipe(G, 'いのりの指輪', '金の指輪', 'ふしぎなきのみ') | |
add_recipe(G, '破幻のリング', '金の指輪', '砂塵のヤリ') | |
add_recipe(G, '破毒のリング', '金の指輪', 'どくばり') | |
add_recipe(G, 'まよけの聖印', '怒りのタトゥー', 'せいすい', '金のロザリオ') | |
add_recipe(G, 'まんげつのリング', '金の指輪', 'どくがのナイフ') | |
add_recipe(G, '目覚ましリング', '金の指輪', 'まどろみ剣') | |
add_recipe(G, '理性のリング', '金の指輪', '堕天使のレイピア') | |
add_recipe(G, '命の指輪', 'いのりの指輪', '命のきのみ') | |
add_recipe(G, 'スーパーリング', 'まんげつのリング', '破幻のリング', '破毒のリング') | |
add_recipe(G, 'まもりのルビー', 'いのりの指輪', 'まもりのたね') | |
add_recipe(G, 'はやてのリング', 'いのりの指輪', 'すばやさのたね') | |
add_recipe(G, 'ほしふるうでわ', 'はやてのリング', 'はやてのリング', 'オリハルコン') | |
add_recipe(G, 'ドクロの指輪', 'ソーサリーリング', 'あくまのしっぽ') | |
add_recipe(G, 'ソーサリーリング', 'ドクロの指輪', '聖者の灰', '聖者の灰') | |
add_recipe(G, 'インテリメガネ', '目覚しリング', '理性のリング', 'かしこさのたね') | |
add_recipe(G, '女神の指輪', '命の指輪', '黄金のティアラ', 'オリハルコン') | |
return G | |
def dump_nodes(G): | |
for i in sorted(G.nodes_iter()): | |
print(i) | |
def dump_strongly_connected_components(G): | |
components = nx.strongly_connected_components(G) | |
for i in components: | |
if len(i) > 1: | |
print(i) | |
def render_graph(G): | |
pos = nx.spring_layout(G) | |
text_items = nx.draw_networkx_labels(G, pos) | |
edge_labels = {(i, j): w['weight'] for i, j, w in G.edges(data=True)} | |
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) | |
fp = FontProperties(fname=r'C:\WINDOWS\Fonts\meiryo.ttc') | |
for t in text_items.values(): | |
t.set_fontproperties(fp) | |
# Finish drawing. | |
nx.draw(G, pos) | |
# Display with Matplotlib. | |
plt.axis('off') | |
plt.show() | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment