![加权多重图上的电路](https://linux22.com/image/324966/%E5%8A%A0%E6%9D%83%E5%A4%9A%E9%87%8D%E5%9B%BE%E4%B8%8A%E7%9A%84%E7%94%B5%E8%B7%AF.png)
我正在网球场上解决中国邮递员问题,如果可能的话,我想在 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}