작업장 일정 문제의 분리형 그래프

작업장 일정 문제의 분리형 그래프

TikZ에서 다음 그래프를 그리는 데 도움을 줄 사람이 있습니까? 여기에 이미지 설명을 입력하세요

나는 다음과 같이 시작했습니다.

\begin{tikzpicture}[  ->,  >=Stealth,  shorten >=1pt,  auto,  node distance=2cm,  thick,  main node/.style={circle,draw,font=\sffamily\Large\bfseries}  ]

  % Nodes
  \node[main node] (b) at (0,0) {b};
  
  \node[main node] (7) at (2,2) {7};
  \node[main node] (4) at (2,0) {4};
  \node[main node] (1) at (2,-2) {1};
  
  \node[main node] (8) at (4,2) {8};
  \node[main node] (5) at (4,0) {5};
  \node[main node] (2) at (4,-2) {2};
  
  \node[main node] (9) at (6,2) {9};
  \node[main node] (6) at (6,0) {6};
  \node[main node] (3) at (6,-2) {3};

  \node[main node] (e) at (8,0) {e};

  % Solid edges
  \draw (b) -- (1);
  \draw (b) -- (4);
  \draw (b) -- (7);
  
  \draw (1) -- (4);
  \draw (2) -- (5);
  \draw (3) -- (6);
  
  \draw (4) -- (7);
  \draw (5) -- (8);
  \draw (6) -- (9);
  
  \draw (7) -- (e);
  \draw (8) -- (e);
  \draw (9) -- (e);

  % Dashed edges
  \draw[dashed] (1) -- (8);
  \draw[dashed] (8) -- (1);
  \draw[dashed] (2) -- (3);
  
  \draw[dashed] (4) -- (5);
  \draw[dashed] (5) -- (6);
  
  \draw[dashed] (7) -- (8);
  \draw[dashed] (8) -- (9);
  
\end{tikzpicture}

그러나 사용 가능한 문서에 따라 완료하려면 시간이 많이 걸립니다. 감사합니다(그림에서 볼 수 있는 얇은 화살표는 코드 조각에 제안된 대로 점선으로 표시될 수 있습니다).

답변1

노드를 배치하고 두 루프의 값과 연결하는 방법은 다음과 같습니다.

이를 위해 chains라이브러리는 노드를 정기적으로 배치하고 연결하는 데 도움이 됩니다. 그들의 거리는 를 통해 주어진다 node distance.

노드 0는 노드 1/3과 1/4의 서쪽 중앙에서 왼쪽에 수직으로 중앙에 배치됩니다.

graph마지막으로 구문/라이브러리를 통해 기존 노드 사이에 몇 가지 간단한 연결을 추가했습니다 .

암호


    \documentclass[tikz]{standalone}
    \usetikzlibrary{arrows.meta, chains, calc, graphs, quotes, shapes.multipart}
    \begin{document}
    \begin{tikzpicture}[
      node distance=1cm,
      all nodes/.style={shape=circle, draw, minimum size=1cm},
      node BF/.style 2 args={
        all nodes, node other/.code=,shape=circle,
        name=#1 #2,node contents=$#1_{#2}$},
      node 7/.style={node BF={B}{#1}}, node 8/.style={node BF={F}{#1}},
      node other/.style 2 args={
        all nodes, shape=circle solidus, inner sep=.1em, name=#1 #2,
        node contents={#2 \nodepart{lower} #1}},
      >=Latex, every join/.style={->},
      start chain=rows going below,
    ]
    \foreach[count=\rowi] \rows in {{1, 3, 6, 7, 3, 6, -33},
                                    {8, 5, 10, 10, 10, 4, -61},
                                    {5, 4, 8, 9, 1, 7, -44},
                                    {5, 5, 5, 3, 8, 9, -45},
                                    {9, 3, 5, 4, 3, 1, -32},
                                    {3, 3, 9, 10, 4, 1, -39}}{
      \node[on chain, node other=\rowi 1];
      \tikzset{start branch={row\rowi} going right}
      \foreach[count=\coli from 2] \elem in \rows 
        \node[on chain, node \coli/.try=\rowi,
                        node other=\rowi\coli, join=by "$\elem$"];
    }
    \node[all nodes, left=2cm of $(3 1.west)!.5!(4 1.west)$](0){$0$}
      foreach \rowi in {1, ..., 6}{
        (0) edge[every join, "0" sloped] (\rowi\space 1)};
    
    \path[dashed] graph[edges=every join, use existing nodes]{
      1 1 ->[bend left]  3 1 ->[bend left]  5 1,
      2 1 ->[bend right] 4 1 ->[bend right] 6 1
    };
    \foreach \up/\Row/\above/\rows in {+/1/above/{1,2,3}, -/6/below/{6,5,4}}
      \foreach[count=\i from 0] \row in \rows
        \draw[rounded corners, every join] (0)
          |- node[at end, \above] {$0$} ([shift={(0,\up 1)}]B \Row.center)
          to[out=0, in/.evaluated={\up(\i==0?135:60)}, out looseness={1+1.5*sign(\i)}](F \row);
    \end{tikzpicture}
    \end{document}

산출

여기에 이미지 설명을 입력하세요

관련 정보