I am trying to draw a dynamic programming matrix. My attempt so far is:
\documentclass[]{article}
\begin{document}
\begin{tabular}{c||c|ccccc|cccccccccc}
&&1&1&1&1&1&0&0&0&0&0&0&0&0&0&0\\\hline\hline
&0&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15\\\hline
0&1&1&2&3&4&5&5&6&7&8&9&10&11&12&13&14\\
0&2&2&2&3&4&5&5&5&6&7&8&9&10&11&12&13\\
0&3&3&3&3&4&5&5&5&5&6&7&8&9&10&11&12\\\hline
1&4&3&3&3&3&4&5&6&6&6&7&8&9&10&11&12\\
1&5&4&3&3&3&3&4&5&6&7&7&8&9&10&11&12\\
1&6&5&4&3&3&3&4&5&6&7&8&8&9&10&11&12\\
1&7&6&5&4&3&3&4&5&6&7&8&9&9&10&11&12\\
1&8&7&6&5&4&3&4&5&6&7&8&9&10&10&11&12\\\hline
0&9&8&7&6&5&4&3&4&5&6&7&8&9&10&10&11\\
0&10&9&8&7&6&5&4&3&4&5&6&7&8&9&10&10\\
0&11&10&9&8&7&6&5&4&3&4&5&6&7&8&9&10\\
0&12&11&10&9&8&7&6&5&4&3&4&5&6&7&8&9\\
\end{tabular}
\end{document}
I would now like to add two things:
- Arrows between the numbers to show a shortest path from the top left to the bottom right.
- I would like to shade some of the blocks in red (the ones where the symbols are different).
I tried to do this in tikz (with a different table) but it didn't go very well.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{pdflscape}
\begin{document}
\tikzset{
table/.style={
matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={rectangle,text width=1.5em,align=center},
text depth=0.3125ex,
text height=0.625ex,
nodes in empty cells
},
row 1/.style={nodes={fill=green!10,text depth=0.4ex,text height=2ex}},
row 6/.style={nodes={text depth=0.4ex,text height=2ex}},
column 1/.style={nodes={fill=green!10}},
}
\begin{landscape}
\begin{tikzpicture}
%\begin{tabular}{c||c|cccccccccc|cccccc|ccccccccc}
\matrix (mat) [table]{
&&0&0&0&0&0&0&0&0&0&0&1&1&1&1&1&1&0&0&0&0&0&0&0&0&0\\
&0&1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&21&22&23&24&25\\
1&1&|[fill=red!20]|1&|[fill=red!20]|2&|[fill=red!20]|3&|[fill=red!20]|4&|[fill=red!20]|5&|[fill=red!20]|6&|[fill=red!20]|7&|[fill=red!20]|8&|[fill=red!20]|9&|[fill=red!20]|10&10&11&12&13&14&15&|[fill=red!20]|16&|[fill=red!20]|17&|[fill=red!20]|18&|[fill=red!20]|19&|[fill=red!20]|20&|[fill=red!20]|21&|[fill=red!20]|22&|[fill=red!20]|23&|[fill=red!20]|24\\
1&2&|[fill=red!20]|2&|[fill=red!20]|2&|[fill=red!20]|3&|[fill=red!20]|4&|[fill=red!20]|5&|[fill=red!20]|6&|[fill=red!20]|7&|[fill=red!20]|8&|[fill=red!20]|9&|[fill=red!20]|10&10&10&11&12&13&14&|[fill=red!20]|15&|[fill=red!20]|16&|[fill=red!20]|17&|[fill=red!20]|18&|[fill=red!20]|19&|[fill=red!20]|20&|[fill=red!20]|21&|[fill=red!20]|22&|[fill=red!20]|23\\
1&3&|[fill=red!20]|3&|[fill=red!20]|3&|[fill=red!20]|3&|[fill=red!20]|4&|[fill=red!20]|5&|[fill=red!20]|6&|[fill=red!20]|7&|[fill=red!20]|8&|[fill=red!20]|9&|[fill=red!20]|10&10&10&10&11&12&13&|[fill=red!20]|14&|[fill=red!20]|15&|[fill=red!20]|16&|[fill=red!20]|17&|[fill=red!20]|18&|[fill=red!20]|19&|[fill=red!20]|20&|[fill=red!20]|21&|[fill=red!20]|22\\
1&4&|[fill=red!20]|4&|[fill=red!20]|4&|[fill=red!20]|4&|[fill=red!20]|4&|[fill=red!20]|5&|[fill=red!20]|6&|[fill=red!20]|7&|[fill=red!20]|8&|[fill=red!20]|9&|[fill=red!20]|10&10&10&10&10&11&12&|[fill=red!20]|13&|[fill=red!20]|14&|[fill=red!20]|15&|[fill=red!20]|16&|[fill=red!20]|17&|[fill=red!20]|18&|[fill=red!20]|19&|[fill=red!20]|20&|[fill=red!20]|21\\
0&5&4&4&4&4&4&5&6&7&8&9&|[fill=red!20]|10&|[fill=red!20]|11&|[fill=red!20]|11&|[fill=red!20]|11&|[fill=red!20]|11&|[fill=red!20]|12&12&13&14&15&16&17&18&19&20\\
0&6&5&4&4&4&4&4&5&6&7&8&|[fill=red!20]|9&|[fill=red!20]|10&|[fill=red!20]|11&|[fill=red!20]|12&|[fill=red!20]|12&|[fill=red!20]|12&12&12&13&14&15&16&17&18&19\\
0&7&6&5&4&4&4&4&4&5&6&7&|[fill=red!20]|8&|[fill=red!20]|9&|[fill=red!20]|10&|[fill=red!20]|11&|[fill=red!20]|12&|[fill=red!20]|13&12&12&12&13&14&15&16&17&18\\
1&8&|[fill=red!20]|7&|[fill=red!20]|6&|[fill=red!20]|5&|[fill=red!20]|5&|[fill=red!20]|5&|[fill=red!20]|5&|[fill=red!20]|5&|[fill=red!20]|5&|[fill=red!20]|6&|[fill=red!20]|7&7&8&9&10&11&12&|[fill=red!20]|13&|[fill=red!20]|13&|[fill=red!20]|13&|[fill=red!20]|13&|[fill=red!20]|14&|[fill=red!20]|15&|[fill=red!20]|16&|[fill=red!20]|17&|[fill=red!20]|18\\
%\end{tabular}
};
\foreach \x in {2,6,9}
{
\draw
([xshift=-.125\pgflinewidth,yshift=3]mat-\x-1.south west) --
([xshift=-.125\pgflinewidth,yshift=3]mat-\x-27.south east);
}
\begin{scope}[shorten >=7pt,shorten <= 7pt]
\draw[->] (mat-2-2.center) -- (mat-2-3.center);
\draw[->] (mat-2-3.center) -- (mat-2-4.center);
\draw[->] (mat-2-4.center) -- (mat-3-5.center);
\draw[->] (mat-3-5.center) -- (mat-4-6.center);
\draw[->] (mat-4-6.center) -- (mat-5-7.center);
\draw[->] (mat-5-7.center) -- (mat-6-8.center);
\draw[->] (mat-6-8.center) -- (mat-7-9.center);
\draw[->] (mat-7-9.center) -- (mat-8-10.center);
\draw[->] (mat-8-10.center) -- (mat-9-11.center);
\draw[->] (mat-9-11.center) -- (mat-10-12.center);
\end{scope}
\end{tikzpicture}
\end{landscape}
\end{document}
This suffers from a few problems.
- There is a strange space between two of the lines in the matrix.
- The shading is shifted so it does not fill a block properly.
- The arrows don't appear to be all lined up properly.
- The LaTeX source is very wordy.
Any help much appreciated.
style
command forrow 6
; what is the goal of this special style? – JPG Mar 15 '19 at 17:41