|
隣接行列からDOT言語に変換します。
隣接行列からグラフを作成するのはなかなか大変な作業ですが、このDOT言語からグラフ画像を作成してくれます。
DOT言語自体は無向グラフ、有向グラフに対応していますが、下記プログラムは有向グラフ版です。("digraph"を"graph"に、"->"を"--"に変更するだけですが...)
実行するとdotファイル(DOT言語)を書き出します。
このdotファイルをメモ帳で開いてもたいした意味はありませんので
下記URLよりダウンロードしてください。私はwindows版のzip版(win32)をダウンロードしました。
http://www.graphviz.org/
dot.exeがあるフォルダ(bin)でコマンドプロンプトから
dot sample.dot -Tpng -o sample.png
と打ち込むとグラフ画像(pngファイル)が出来上がります。
https://ja.wikipedia.org/wiki/DOT言語
http://cbrc3.cbrc.jp/~tominaga/translations/graphviz/dotguide.pdf
https://qiita.com/rubytomato@github/items/51779135bc4b77c8c20d
DIM NODE$(26)
MAT READ NODE$
DATA A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
LET F$="D:\tool\Graphviz\bin\sample" !ドライブ、パスを指定してください。(ファイル名はsample.dotになります)
LET FORMAT$="png" ! jpg gif svg ps pdf...
OPEN #1:NAME F$&".dot"
ERASE #1
PRINT #1:"digraph sample {"
!!PRINT #1:" graph[rankdir=LR];" ! TB BT LR RL
!!PRINT #1:" node [shape=box];" ! box polygon ellipse circle point egg triangle diamond trapezium parallellogram house pentagon hexagon doublecircle...
RESTORE 10
READ SIZE
FOR J=1 TO SIZE
FOR I=1 TO SIZE
READ S$
IF S$<>"INF" THEN
PRINT #1:" ";NODE$(J);" -> ";NODE$(I);" [fontcolor=red label=";CHR$(34);S$;CHR$(34);"];"
END IF
NEXT I
NEXT J
PRINT #1:"}"
CLOSE #1
!!EXECUTE "D:\tool\Graphviz\bin\dot.exe" WITH(F$&".dot","-T"&FORMAT$,"-o",F$&"."&FORMAT$)
!!GLOAD F$&"."&FORMAT$
10 DATA 10 ! 有向グラフ
DATA INF, 1, 4,INF, 5,INF, 2,INF, 2,INF
DATA INF,INF, 3,INF,INF, 4,INF,INF,INF,INF
DATA 3,INF,INF, 2,INF,INF, 1,INF,INF, 1
DATA INF,INF, 2,INF,INF,INF,INF, 3,INF,INF
DATA INF, 2,INF,INF,INF, 2,INF,INF,INF, 1
DATA 1,INF, 4,INF, 1,INF, 5,INF,INF,INF
DATA INF, 3,INF,INF,INF, 6,INF, 5,INF,INF
DATA 1,INF,INF, 3,INF,INF,INF,INF, 5,INF
DATA INF, 2,INF, 5,INF, 2,INF, 3,INF, 2
DATA 1,INF, 4, 3,INF,INF, 5,INF,INF,INF
20 DATA 8 ! 無向グラフ(対角成分に対して対称。A(I,J)とA(J,I)が同値)
DATA INF, 1, 1,INF,INF,INF, 1, 1
DATA 1,INF, 1,INF, 1,INF,INF,INF
DATA 1, 1,INF, 1,INF, 1, 1,INF
DATA INF,INF, 1,INF, 1,INF, 1, 1
DATA INF, 1,INF, 1,INF, 1,INF,INF
DATA INF,INF, 1,INF, 1,INF, 1,INF
DATA 1,INF, 1, 1,INF, 1,INF, 1
DATA 1,INF,INF, 1,INF,INF, 1,INF
30 DATA 10 ! 有向グラフ
DATA INF, 2,INF, 1,INF, 4, 6,INF, 7,INF
DATA INF,INF,INF, -2, 1,INF,INF, 2,INF, 1
DATA -3,INF,INF,INF, 1,INF, -1,INF, 2,INF
DATA INF, 2,INF,INF,INF,INF, 1,INF,INF, 3
DATA INF,INF, -1,INF,INF, 2,INF, 3, 4,INF
DATA 4,INF,INF,INF, 2,INF,INF, 1,INF, 5
DATA INF, 1,INF, 2,INF, 1,INF, 5,INF,INF
DATA 2,INF,INF, 4,INF, 3,INF,INF, 2, 4
DATA INF,INF, 4,INF, 4,INF, -2,INF,INF,INF
DATA 1,INF, 3,INF, 6,INF, 1,INF,INF,INF
END
|
|