DOT言語変換

 投稿者:しばっち  投稿日:2021年12月12日(日)10時01分48秒
  隣接行列から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

 

戻る