如何创建棋盘游戏搜索树?

如何创建棋盘游戏搜索树?

如何在游戏中创建搜索树的可视化效果,我不想只看到节点,而是想看到每一步的棋盘配置?例如,如果能提供关于此图像的任何代码帮助,我将不胜感激。

CRP 示例

[编辑]:不幸的是,到现在为止我还没有太多信息:我知道如何生成这样的矩阵,但我不知道如何在一张图片中创建边缘和其余矩阵。

\begin{figure}
\centering
\begin{tikzpicture}[rotate=270]
\centering
   \draw[-, very thick] (0,0) grid +(3,3);
\draw (0.5, 0.5) node {3};
\draw (0.5, 1.5) node {};
\draw (0.5, 2.5) node {};
\draw (1.5, 0.5) node {5};
\draw (1.5, 1.5) node {};
\draw (1.5, 2.5) node {2};
\draw (2.5, 0.5) node {1};
\draw (2.5, 1.5) node {6};
\draw (2.5, 2.5) node {4};
\end{tikzpicture}
 \caption{Example}
 \label{fig:example}
\end{figure}

答案1

您可以绘制一棵树,tikz并在节点内插入表。

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

\begin{document}
\begin{tikzpicture}[
        level distance=25mm,
        level 1/.style={sibling distance=50mm},
        level 2/.style={sibling distance=30mm},
        level 3/.style={sibling distance=30mm},
        every node/.style = {shape=rectangle, align=center}
    ]
    \node{
        $U = 4$\\[1mm]
        \begin{tabular}{|c|c|c|}
            \hline
            6 &   &  \\ \hline
            1 & 5 &  \\ \hline
            4 & 2 & 3\\ \hline
        \end{tabular}\hfill\\[1mm]
        $L = 2$
    } [grow=right]
    child{
        node{
            $U = 4$\\[1mm]
            \begin{tabular}{|c|c|c|}
                \hline
                  &   &  \\ \hline
                1 & 5 & 6\\ \hline
                4 & 2 & 3\\ \hline
            \end{tabular}\hfill\\[1mm]
            $L = 3$
        }
    }
    child{
        node{
            $U = 5$\\[1mm]
            \begin{tabular}{|c|c|c|}
                \hline
                  & 6 &  \\ \hline
                1 & 5 &  \\ \hline
                4 & 2 & 3\\ \hline
            \end{tabular}\hfill\\[1mm]
            $L = 3$
        }
        child{
            node{
                \begin{tabular}{|c|c|c|}
                    \hline
                      &   &  \\ \hline
                    6 & 5 &  \\ \hline
                    4 & 2 & 3\\ \hline
                \end{tabular}\hfill\\[1mm]
                $U = 5$, $L = 3$
            }
        }
        child{
            node{
                \begin{tabular}{|c|c|c|}
                    \hline
                      &   &  \\ \hline
                      & 5 & 6 \\ \hline
                    4 & 2 & 3\\ \hline
                \end{tabular}\hfill\\[1mm]
                $U = 5$, $L = 3$
            }
        }
    };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我从中获取了表格定义dexteritas 的回答为了避免必须输入图像中的所有内容,添加了该答案中省略的矩阵的定义,并将结果包装在环境中forest。使用 Forest 的优点是树规范更加简洁,并且格式可以自动化,从而获得更大的灵活性和一致性。也就是说,这意味着更少的输入和更易于维护的代码。

我们创建UL作为标记列表来保存相关值。然后可以将它们指定为树中的键值选项。

\forestset{
  declare toks={U}{},
  declare toks={L}{},
}

我们不需要明确的tabular环境或类似的东西。我们可以使用 Forest 的环境align,这样我们就可以进行tabular设置。我们可以自动添加顶部和底部的规则,而不是指定所有水平规则。我们将生长方向设置为0(东/右),覆盖默认值。

\begin{forest}
  for tree={
    grow'=0,
    align=|c|c|c|,
    delay={content/.wrap value=\hline #1\\\hline},
    child anchor=parent,
    l sep'+=20pt,
  },

我们添加代码来处理UL。对于终端节点,我们将它们作为 添加label到右侧。在其他情况下,我们tabular使用将其添加到 中\multicolumn。这意味着我们不必担心间距:Forest 会自动计算出来。当我们处理终端节点时,我们还将圆添加到从父节点绘制的边的末端。

  before typesetting nodes={
    where n children=0{
      label/.process={OOw2 {U}{L} {right:{U=#1, L=#2}}},
      edge+={-Circle},
    }{
      content/.process={ OOOw3 {content}{U}{L} {\multicolumn{3}{c}{U=#2}\\#1\multicolumn{3}{c}{L=#3} } },
    },
  }

现在来看看树的规范。这是根,其值为UL

  [6 &   &  \\ \hline 1 & 5 &  \\ \hline 4 & 2 & 3, U=4, L=2

我们按照同样的方式继续。

    [& 6 &  \\ \hline 1 & 5 &  \\ \hline 4 & 2 & 3, U=5, L=3
      [&   &  \\ \hline & 5 & 6 \\ \hline 4 & 2 & 3, U=5, L=4
      ]
      [&   &  \\ \hline 6 & 5 &  \\ \hline 4 & 2 & 3, U=5, L=4
      ]
    ]
    [&   &  \\ \hline 1 & 5 & 6\\ \hline 4 & 2 & 3, U=4, L=3
      [&   &  \\ \hline  5 && 6 \\ \hline 4 & 2 & 3, U=4, L=4
      ]
      [&   & 5 \\ \hline && 6 \\ \hline 4 & 2 & 3, U=5, L=4
      ]
    ]
  ]
\end{forest}

森林矩阵

完整代码:

\documentclass[border=10pt]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta}
\begin{document}
\forestset{
  declare toks={U}{},
  declare toks={L}{},
}
\begin{forest}
  for tree={
    grow'=0,
    align=|c|c|c|,
    delay={content/.wrap value=\hline #1\\\hline},
    child anchor=parent,
    l sep'+=20pt,
  },
  before typesetting nodes={
    where n children=0{
      label/.process={OOw2 {U}{L} {right:{U=#1, L=#2}}},
      edge+={-Circle},
    }{
      content/.process={ OOOw3 {content}{U}{L} {\multicolumn{3}{c}{U=#2}\\#1\multicolumn{3}{c}{L=#3} } },
    },
  }
  [6 &   &  \\ \hline 1 & 5 &  \\ \hline 4 & 2 & 3, U=4, L=2
    [& 6 &  \\ \hline 1 & 5 &  \\ \hline 4 & 2 & 3, U=5, L=3
      [&   &  \\ \hline & 5 & 6 \\ \hline 4 & 2 & 3, U=5, L=4
      ]
      [&   &  \\ \hline 6 & 5 &  \\ \hline 4 & 2 & 3, U=5, L=4
      ]
    ]
    [&   &  \\ \hline 1 & 5 & 6\\ \hline 4 & 2 & 3, U=4, L=3
      [&   &  \\ \hline  5 && 6 \\ \hline 4 & 2 & 3, U=4, L=4
      ]
      [&   & 5 \\ \hline && 6 \\ \hline 4 & 2 & 3, U=5, L=4
      ]
    ]
  ]
\end{forest}
\end{document}

相关内容