1

グラフを作成するソフトウェアを作成しています。
最も基本的な形式では、グラフは、次のセグメントで agmemread に渡される文字列のようなファイルに記述されます。これを構築して PNG として保存するコードは次のとおりです。

#include <gvc.h>

int main()
{
    GVC_t* gvc;
    Agraph_t* g;    

    gvc=gvContext();
    g=agmemread
    (
        "digraph g"\
        "{"\
        "   1->2;"\
        "   2->3;"\
        "   2->13;"\
        "   3->4;"\
        "   4->5;"\
        "   4->6;"\
        "   5->8;"\
        "   6->7;"\
        "   7->8;"\
        "   8->9;"\
        "   8->10;"\
        "   9->23;"\
        "   10->11;"\
        "   10->12;"\
        "   11->23;"\
        "   12->23;"\
        "   13->14;"\
        "   14->15;"\
        "   15->16;"\
        "   15->19;"\
        "   16->17;"\
        "   17->18;"\
        "   18->21;"\
        "   19->20;"\
        "   20->21;"\
        "   21->22;"\
        "   22->23;"\
        "}"
    );

    gvLayout(gvc,g,"dot");
    gvRenderFilename(gvc,g,"png","g_gen.png");

    gvFreeLayout(gvc, g); 
    agclose(g); 
    gvFreeContext(gvc);

    return 0;
}

私の問題は、「g_gen.png」(コードから) に保存されたグラフが次のようになることです: http://i56.tinypic.com/25hk3de.png

そして、この構造に似せたい (Windows 用の DIA で描画):
http://i56.tinypic.com/t070br.png

ノードの配置を意味します。特に:

  1. 分割 (2、4、8、10、15 など) は、サブツリーの上の中間にある必要があります
  2. ジャンクション (8、23、21 など) は、サブツリーの下の中央にある必要があります
  3. 枝は平準化する必要があります (5、6、15 は単一のレベルにあります。9、10、18 も同様です)。
  4. まっすぐなエッジの矢印 (ここでは行き過ぎかもしれませんが、試してみる価値があります)
  5. 全体として - 2 番目の図に示されている構造にできるだけ一致させます。
4

1 に答える 1

0

これは複雑なgraphvizツリー構造の質問(すでに回答済み)と同じだと思います。

于 2011-05-20T01:54:12.567 に答える