Advertisement
Guest User

Untitled

a guest
Oct 1st, 2014
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. MakeLevel[{},_,_,rank_] := rank
  2. MakeLevel[l_List,lvl_,adjm_List,r_List] :=
  3. Module[ {rank=r, v, lst=l },
  4. rank = SetLevel[lst,lvl,rank]; (* make this level ready *)
  5. While[ lst != {},
  6. v = First[lst];
  7. rank = MakeLevel[adjm[[v]], lvl+1,adjm,rank];
  8. lst = Rest[lst];
  9. ];
  10. rank
  11. ]
  12.  
  13. HasseDiagram[g_Combinatorica`Graph, fak_:1] :=
  14. Module[{r, rank, m, stages, freq=Table[0,{V[g]}],
  15. adjm, first, i},
  16. r = TransitiveReduction[RemoveSelfLoops[g]];
  17. adjm = ToAdjacencyLists[r];
  18. rank = Table[ 0,{ V[g]} ];
  19. first = Select[ Range[ V[g]], InDegree[r,#]==0& ];
  20. rank = MakeLevel[ first, 1, adjm, rank];
  21. first = Max[rank];
  22. stages = Distribution[ rank ];
  23. MakeUndirected[
  24. ChangeVertices[r,
  25. Table[
  26. m = ++ freq[[ rank[[i]] ]];
  27. {((m-1) + (1-stages[[rank[[i]] ]])/2)*
  28. fak^(first-rank[[i]]), rank[[i]]}//N,
  29. {i, V[g]}
  30. ]
  31. ]
  32. ]
  33. ] /; AcyclicQ[RemoveSelfLoops[g]] && !UndirectedQ[g]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement