Mathematica 63 43字节
感谢Martin Ender的建议,节省了20个字节!
EdgeCount[8~KnightTourGraph~8,#+1+8#2/<->_]&
上面的代码在完整的骑士巡回图表上找到距给定像元1跳的平方数。
g=KnightTourGraph[8,8,VertexLabels->"Name",Axes->True]
显示完整的骑士巡回图,以及顶点名称和坐标。请注意,Mathematica默认将坐标设为基于一的索引。
#+1+8#2&[r,f]
converts 使用从零开始的值作为输入,返回与等级(row)r
和文件(column)处的正方形相对应的顶点f
。
例如#+1+8#2&[2,1]
返回11。
EdgeCount
给出邻域图中的边数。
等级2的边,文件1(正方形11):
IncidenceList[8~KnightTourGraph~8, 8 #2 + # + 1] &[2, 1]
(*{1 <-> 11, 5 <-> 11, 11 <-> 17, 11 <-> 21, 11 <-> 26, 11 <-> 28}*)
突出显示的边缘:
HighlightGraph[g, {1, 5, 11, 17, 21, 26, 28, Style[1 <-> 11, Thick, Blue], Style[5 <-> 11, Thick, Blue], Style[11 <-> 17, Thick, Blue], Style[11 <-> 21, Thick, Blue], Style[11 <-> 26, Thick, Blue], Style[11 <-> 28, Thick, Blue]},GraphHighlightStyle -> "DehighlightFade", PlotRangePadding -> .5]
方法2:欧几里得距离
70字节
该方法较长,但可能会引起人们的兴趣。该方法是检查棋盘中心与目标单元之间的欧几里得距离。
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&
举例说明
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&@{0, 0}
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&@{3, 3}
2
8
为了帮助可视化到棋盘中心的距离如何足以分配一个值。
values={{2,3,4,4,4,4,3,2},{3,4,6,6,6,6,4,3},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{3,4,6,6,6,6,4,3},{2,3,4,4,4,4,3,2}};
f[x_]:=Text[x,#]&/@Position[values,x]r_~w~p_:=RegionMember[{3.5`,3.5`}~Disk~r,p]
h@y_:=Which[2.2~w~y,8,3~w~y,6,4~w~y,4,4.6~w~y,3,2<3,2]
Graphics[{Circle[{4.5, 4.5}, 2.3], Circle[{4.5, 4.5}, 3],
圈子[{4.5,4.5},4],
圆[{4.5,4.5},4.6],展平[f / @ {2,3,4,6,8},1]},轴-> True,AxesOrigin-> {-1,-1}]
数字2.2、3、4和4.6是圆的半径。