我想绘制以下动态规划图。我相信使用foreach
语法可以加快速度。
我已经开始写的代码是
\documentclass[tikz, convert = false]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x/\y/\lab in {0/0/5, 1/1/6, 2/2/10, 3/3/7, 4/2/8, 5/1/10, 6/0/11,
5/-1/9, 4/-2/7, 3/-3/6, 2/-2/9, 1/-1/7, 0/0/}{
\draw (\x, \y) -- ??
\end{tikzpicture}
\end{document}
问题是我需要索引下一个点,这样它就可以了,(x_1, y_1) -- (x_1, y_2) node[font = \small, pos = .5, fill = white, inner sep = .01] {\lab};
如何做到这一点?
然后我必须创建其他foreach
循环来跨越。有没有办法在一个循环中完成整个过程?如果可以,怎么做,因为我不知道该怎么做。
答案1
这是一种可能的\foreach
方法,可让您按行指定权重,然后按列指定权重。
\documentclass{article}
\usepackage{tikz}
\newcounter{rowcount}
\newcounter{columncount}
\begin{document}
\begin{tikzpicture}[scale=2]
\begin{scope}[rotate=-45]
% rows
\foreach[count=\y from 0] \W in {% row-wise weights
{7,8,6},
{8,8,12},
{6,9,7},
{7,8,10}%
}{
\stepcounter{rowcount}
\foreach \w [count=\x, remember=\x as \lastx (initially 0)] in \W
\draw (\lastx,\y) -- (\x,\y)
node[above,pos=0.5] {\w};
}
% columns
\foreach[count=\x from 0] \W in {% column-wise weights
{5,6,10},
{7,10,5},
{10,5,6},
{7,9,11}%
}{
\stepcounter{columncount}
\foreach \w [count=\y, remember=\y as \lasty (initially 0)] in \W
\draw (\x,\lasty) -- (\x,\y)
node[above,pos=0.5] {\w};
}
\fill (0,0) circle (0.1em) node[below left] {A};
\fill ({\value{columncount}-1},{\value{rowcount}-1}) circle (0.1em) node[below right] {B};
\end{scope}
\end{tikzpicture}
\end{document}