加权多重图上的电路

加权多重图上的电路

我正在网球场上解决中国邮递员问题,如果可能的话,我想在 Tikz 中绘制电路。如果我只有一张图,我知道如何绘制电路,但我在解决中国邮递员问题时得到的修改图是多重图。

我获得的行程是 (1,12),(12,11),(11,3),(3,4),(4,5),(5,6),(6,7), (7,8),(8,4),(4,8),(8,9),(9,10),(10,9),(9,11),(11,3),(3,2),(2,1)

我的仅用于表示图形的 TikZ 代码如下:

\begin{tikzpicture}[shorten >=1pt, auto, node distance=3cm, thick,
   edge_style/.style={draw=black, thick}]

   \foreach [count=\i] \x/\y/\t in {-2/-2/2, -1/-2/3, 4/3/6, 3/-2/4, 4/-2/5, -2/3/1, 3/3/7, 3/0.7/8, 1/0.7/9, 1/3/10, -1/0.7/11, -1/3/12}
     \node [shape=circle,inner sep=2pt,draw,thick,font=\sffamily\small]
        (v\i) at (\x,\y) {\t};

   \foreach \i/\j/\t in {1/2/4.5, 2/4/27, 1/6/39, 5/4/4.5, 5/3/39, 4/8/21, 8/7/18, 8/9/13.5, 9/10/18, 9/11/13.5, 11/2/21, 11/12/18}
    \draw [edge_style]  (v\i) edge node{\t} (v\j);
\end{tikzpicture}

我只想改为\draw[edge_style]\draw[->, >=latex]但这不利于创建多边,因为它们需要从node到形成弧node

谢谢你的帮助!

答案1

您可以使用edge选项bend left/right,甚至输入类似的程度bend left=10

箭头上的节点已缩小,以便更好地适应图表。

\xi我使用命令添加了另一个变量count,从 1 开始,它将中的每个元素加 1 \foreach,基本上为列表中的每个项目设置一个索引号。

然后将 3 个异常移至 foreach 的前三个,以便它们都靠近在一起。1 2 3然后添加一个if语句,该语句确实不言自明。

编辑

因为你想要另一个异常,我将异常移到了位置3,所以我嵌套了另一个\ifnum,现在它会检查数字是否低于3,如果是,3以及其他所有内容,按此顺序。

输出

在此处输入图片描述

代码

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}

\usetikzlibrary{arrows.meta}

\begin{document}
\begin{tikzpicture}[shorten >=1pt, auto, node distance=3cm, thick,
   edge_style/.style={-{Latex}}]

   \foreach [count=\i] \x/\y/\t in {-2/-2/2, -1/-2/3, 4/3/6, 3/-2/4, 4/-2/5, -2/3/1, 3/3/7, 3/0.7/8, 1/0.7/9, 1/3/10, -1/0.7/11, -1/3/12}
     \node [shape=circle,inner sep=2pt,draw,thick,font=\sffamily\small]
        (v\i) at (\x,\y) {\t};

    \foreach \i/\j/\t [count=\xi starting from 1] in {9/10/18, 4/8/21, 11/2/21, 1/2/4.5, 2/4/27, 1/6/39, 5/4/4.5, 5/3/39, 8/7/18, 8/9/13.5, 9/11/13.5, 11/12/18}{
    \ifnum\xi<3
        \draw [edge_style]  (v\i) edge[bend left=10] (v\j);
        \draw [edge_style]  (v\j) edge[bend left=10] node[midway, font=\scriptsize]{\t} (v\i);
    \else
        \ifnum\xi=3
            \draw [edge_style]  (v\i) edge[bend left=10] (v\j);
            \draw [edge_style]  (v\i) edge[bend right=10] node[left, midway, font=\scriptsize]{\t} (v\j);
        \else
            \draw [edge_style]  (v\i) -- node[midway, font=\scriptsize]{\t} (v\j);
        \fi
    \fi
}
\end{tikzpicture}
\end{document}

相关内容