如何根据顶点的度数来设计顶点网格?

如何根据顶点的度数来设计顶点网格?

我正在研究一个图论问题,需要绘制一个节点/顶点网格,表示它们的度数并说明它们的路径。我需要的图表基本上是一个 7 x 7 网格,显示棋盘上骑士占据某个位置时可以移动的次数。我希望颜色随着度数的增加而变暗。

我需要的网格与第三个答案中的蓝色 7 x 7 图像相同这一页,或如下所示。

7x7 地图

我尝试修改在线找到的一堆示例,但无法创建类似的东西。

答案1

这里我使用 TeX 计数器进行一些基本计算,但pgfmath也可以使用它。代码使用两个嵌套foreach循环遍历所有单元格。在每个单元格上,(\x,\y)内部foreach循环遍历所有可能的马匹跳跃(\px,\py)。如果跳跃在棋盘外,则不计算在内。有效移动的次数在中累积\n(记得使用分配给它\global,否则值会在循环体之外丢失)。然后我们绘制边缘(在背景上,以避免边缘越过稍后绘制的节点);我通过仅绘制“向前”跳跃来避免两次绘制相同的线。填充颜色是通过将跳跃次数乘以 10 来获得合理的混合百分比blue

\documentclass[tikz]{standalone}

\pgfdeclarelayer{background}
\pgfsetlayers{background,main}

\begin{document}
\begin{tikzpicture}

\newcount\n
\newcount\px
\newcount\py
\newcount\ncolor
\foreach \x in {1,...,8}{
    \foreach \y in {1,...,8}{
        \n=0
        \foreach \dx/\dy in {-2/-1,-1/-2,1/-2,2/-1,2/1,1/2,-1/2,-2/1}{
            \px=\x
            \py=\y
            \advance\px by \dx\relax
            \advance\py by \dy\relax
            \ifnum\px>0
            \ifnum\px<9
            \ifnum\py>0
            \ifnum\py<9
                \global\advance\n by 1\relax
                \begin{pgfonlayer}{background}
                    \ifnum\dx=2
                        \draw (\x,\y) -- (\px,\py);
                    \fi
                    \ifnum\dy=2
                        \draw (\x,\y) -- (\px,\py);
                    \fi
                \end{pgfonlayer}
            \fi\fi\fi\fi
        }
        \ncolor=\n
        \multiply\ncolor by 10
        \node[draw,circle,fill={blue!\the\ncolor}] at (\x,\y) {\the\n};
    }
}
\end{tikzpicture}
\end{document}

结果如下:

预览

\ncolor如果您对颜色的 10 个因素感到满意,那么避免计数器的技巧如下:

\node[draw,circle,fill={blue!\the\n0}] at (\x,\y) {\the\n};

相关内容