5

I need to draw something like this (forgive me, it is very crude), to denote the dependencies in my algorithm. Basically, I want to say that the circle (l,r) has incoming arrows from the 3 other circles (l,r-1), (l-1,r-1) and (l-1,r). I could only come up with a grid, using Tikz. how does one draw the dependency arrows and nodes as in the below image?

\documentclass[24point]{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[step=0.5cm,color=gray] (-1,-1) grid (1,1);
\foreach \x/\y/\m in {+0.75/+0.75/,-0.75/-0.75/} % etc
    \node at (\x,\y) {\m};
\end{tikzpicture}%

\end{document}

3
  • 1
    Here it would probably make sense to use a matrix of nodes and interconnecting those rather than a foreach approach. Apr 4, 2019 at 12:27
  • @ClaudioFiandrino Any references are welcome. Apr 4, 2019 at 12:29
  • @ClaudioFiandrino Hiiiiiiiiiii :-). My affectionate regards.
    – Sebastiano
    Apr 4, 2019 at 12:30

2 Answers 2

2

I would draw your diagram like this

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[>=stealth]
\foreach \i in {0,1,2,3.5,4.5,5.5,7,8} {
    \draw[gray,very thin] (0,\i) -- (8.5,\i);
    \draw[gray,very thin] (\i,0) -- (\i,8.5);
}
\draw[<->] (8.5,0) node[below] {$n$} -- (0,0) node[below left] {$(1,1)$} -- (0,8.5) node[left] {$n$};
\draw[->] (2,-.5) -- (3,-.5) node[above,near start] {$r$};
\foreach \i in {2.75,6.25} {
    \foreach \j in {.5,1.5,4,5,7.5} {
        \node at (\i,\j) {$\cdots$};
        \node at (\j,\i) {$\vdots$};
    }
    \foreach \j in {2.75,6.25}
        \node at (\i,\j) {\reflectbox{$\ddots$}};
}
\begin{scope}[every node/.style={
    circle,draw,
    minimum size=.8cm,
    align=center,
    font=\footnotesize,
    inner sep=0pt
}]
    \node at (4,4) (11) {$\scriptstyle l-1$\\[-1ex]$\scriptstyle r-1$};
    \node at (5,4) (21) {$\scriptstyle l-1$\\[-1ex]$\scriptstyle r$};
    \node at (4,5) (12) {$\scriptstyle l$\\[-1ex]$\scriptstyle r-1$};
    \node at (5,5) (22) {$\scriptstyle l$\\[-1ex]$\scriptstyle r$};
\end{scope}
\draw[thick,red,->] (11) -- (22);
\draw[thick,red,->] (12) to[bend left=45] (22);
\draw[thick,red,->] (21) to[bend right=45] (22);
\end{tikzpicture}
\end{document}

enter image description here

2

Using a loop here is probably over-killing, but anyway, here is a modification of your code. Single draw command to do this ;)

\documentclass[tikz,border=7pt]{standalone}
\begin{document}
  \tikz
    \draw[nodes={inner sep=1pt},color=gray]
      (0,0) grid[shift={(-.5,-.5)}] (4,4)
      foreach[count=\i] \x/\y/\m in {2/3/a,2/2/b,3/3/c,}{(\x,\y) node(n\i) {\m}}
      (n1) edge[red,-latex] (n3)
      (n2) edge[red,-latex] (n3)
    ;
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.