程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了较早的graphviz排名大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决较早的graphviz排名?

开发过程中遇到较早的graphviz排名的问题如何解决?下面主要结合日常开发的经验,给出你关于较早的graphviz排名的解决方法建议,希望对你解决较早的graphviz排名有所启发或帮助;

在下图中,是否有我可以设置的属性可以将 A 和 H 呈现在同一等级上;和 D 和 G 在同一等级?对于我的用例,每个节点都是一个进程,它会在传入节点进程完成后立即开始,我希望节点的位置指示开始时间。

digraph {
    A -> B
    B -> C
    H -> C
    C -> D
    D -> E
    E -> F
    C -> G
    G -> F
}

较早的graphviz排名

我希望结果如下所示,但由于这些图是动态生成的,我不想计算应该将哪些节点标记为相同等级。

digraph {
    { rank="same"; A; H }
    { rank="same"; D; G }
    A -> B
    B -> C
    H -> C
    C -> D
    D -> E
    E -> F
    C -> G
    G -> F
}

较早的graphviz排名

解决方法

您要查找的内容作为 Flying Logic 软件中的一个设置存在,在那里被称为偏差。

不幸的是,在我回答时(2021 年 3 月),这并不存在。请查看一位长期维护者对我在 twitter 上的问题的回答。 https://twitter.com/Graphviz/status/1128339044826517508?s=20

,

这个 gvpr (https://www.graphviz.org/pdf/gvpr.1.pdf) 程序似乎正确地添加了具有 rank=same 的子图以根据要求“提升”节点。
请注意,如果源图有子图(尤其是簇),请不要指望它会起作用。

BEGIN {
  int i,j,n,s=0,changed=0; 
  int checkedNode[];
  int newRank[];
  string str1,rankString[],fld[int];
  node_t aNode,headNode;
  edge_t anEdge;
  graph_t aSub;
}
BEG_G{
  for (aNode=fstnode($G); aNode; aNode = nxtnode(aNode)){
    if (aNode.indegree==0){
      newRank[aNode]=1;
    }
  }
  while (1){
  for (newRank[aNode]){
    for (anEdge = fstout(aNode); anEdge; anEdge = nxtout(anEdge)){
      headNode=anEdge.head;
      if (newRank[headNode]=="" || (newRank[aNode]+1)>newRank[headNode]){
        newRank[headNode]=newRank[aNode]+1;
        print ("// rank=",newRank[headNode],"  ",headNode.name);
    changed++;
      }
    }
  }
  if (changed==0)break;
  changed=0;
  }
  for (newRank[aNode]){
    rankString[newRank[aNode]]=sprintf("%s%s|",rankString[newRank[aNode]],aNode.name);
  }
  /* create subgraphs w/ rank=same */
  for (rankString[i]){
    unset(fld);
    n=tokens(rankString[i],fld,"|");
    if (n>1){
      str1=sprintf("__sub_%d",++s);    
      aSub=subg($G,str1);
      aSub.rank="same";
      for (j=0;j<n;j++){
        print ("// fld: >",fld[j],"<  ",n);
        aNode=node($G,fld[j]);
        aNode=subnode(aSub,aNode);
      }
    }
  }
}

像这样使用命令行:

gvpr -c -f raiseRanks.gvpr  yourfile.gv | dot -Tpng >yourfile.png 

给予:

// comments deleted
igraph {
        subgraph __sub_1 {
                graph [rank=same];
                A;
                H;
        }
        subgraph __sub_2 {
                graph [rank=same];
                D;
                G;
        }
        A -> B;
        B -> C;
        C -> D;
        C -> G;
        H -> C;
        D -> E;
        E -> F;
        G -> F;
}

较早的graphviz排名

大佬总结

以上是大佬教程为你收集整理的较早的graphviz排名全部内容,希望文章能够帮你解决较早的graphviz排名所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: