早教吧作业答案频道 -->数学-->
m*n的棋盘中有一匹(或者“个”吧),从此无限棋盘上任一点出发,能够跳到任意一个指定的点求证m,n互质,且不全为奇数.马走“日”字应该知道
题目详情
m*n的棋盘中有一匹(或者“个”吧),从此无限棋盘上任一点出发,能够跳到任意一个指定的点 【求证】m,n互质,且不全为奇数.
【马走“日”字应该知道】
【马走“日”字应该知道】
▼优质解答
答案和解析
;; 回溯算法求解马的跳棋盘问题
;; 假设一开始马在(1, 1)位置,目标为(9, 5).棋盘大小为9X5.
;; 状态表示,x, y代表马的坐标
(defstruct state x y)
;; 初始状态,马在左下角
(defconstant init-state
(make-state :x 1 :y 1))
;; 目标状态,马在左上角
(defconstant goal-state
(make-state :x 9 :y 5))
;; 状态转移 -- 代表八个方向上的马的跳跃时的坐标的变化.
(defconstant actions-table
'((1 2) (2 1) (-1 2) (-2 1)
(-1 -2) (-2 -1) (1 -2) (2 -1)))
;; 顶层调用函数, 函数值为能够达到目标状态的路径中的一条.
(defun solve ()
(reverse (backtrace (list init-state))))
;; 回溯算法求解,并不一定得到最优解.
(defun backtrace (path)
(let ((current-state (car path)))
(if (state-equal current-state goal-state) path ;找到解,返回路径
(progn
(push (make-state) path)
(loop for action in actions-table
do (setf (car path)
(next-state current-state action))
thereis (and (verify (car path))
(not (find (car path) (cdr path)
:test #'state-equal))
(backtrace path)))))))
;; 判断两个状态是否相同,状态S1的x,y和S2的x,y分别相等的
;; 时候,就认为S1和S2相同
(defun state-equal (S1 S2)
(and (equal (state-x S1) (state-x S2))
(equal (state-y S1) (state-y S2))))
;; 后续状态计算
(defun next-state (current-state action)
"current-state 为当前状态, action为活动, 函数值为当前状态加上
活动action的后续状态."
(let ((S (make-state)))
(setf (state-x S)
(+ (state-x current-state)
(first action))
(state-y S)
(+ (state-y current-state)
(second action)))
S))
;; 检查状态S是否合法,当状态S在棋盘种的时候,S就是合法的.
(defun verify (S)
(and (= (state-x S) 1)
(= (state-y S) 1)))
>(solve)
;; 假设一开始马在(1, 1)位置,目标为(9, 5).棋盘大小为9X5.
;; 状态表示,x, y代表马的坐标
(defstruct state x y)
;; 初始状态,马在左下角
(defconstant init-state
(make-state :x 1 :y 1))
;; 目标状态,马在左上角
(defconstant goal-state
(make-state :x 9 :y 5))
;; 状态转移 -- 代表八个方向上的马的跳跃时的坐标的变化.
(defconstant actions-table
'((1 2) (2 1) (-1 2) (-2 1)
(-1 -2) (-2 -1) (1 -2) (2 -1)))
;; 顶层调用函数, 函数值为能够达到目标状态的路径中的一条.
(defun solve ()
(reverse (backtrace (list init-state))))
;; 回溯算法求解,并不一定得到最优解.
(defun backtrace (path)
(let ((current-state (car path)))
(if (state-equal current-state goal-state) path ;找到解,返回路径
(progn
(push (make-state) path)
(loop for action in actions-table
do (setf (car path)
(next-state current-state action))
thereis (and (verify (car path))
(not (find (car path) (cdr path)
:test #'state-equal))
(backtrace path)))))))
;; 判断两个状态是否相同,状态S1的x,y和S2的x,y分别相等的
;; 时候,就认为S1和S2相同
(defun state-equal (S1 S2)
(and (equal (state-x S1) (state-x S2))
(equal (state-y S1) (state-y S2))))
;; 后续状态计算
(defun next-state (current-state action)
"current-state 为当前状态, action为活动, 函数值为当前状态加上
活动action的后续状态."
(let ((S (make-state)))
(setf (state-x S)
(+ (state-x current-state)
(first action))
(state-y S)
(+ (state-y current-state)
(second action)))
S))
;; 检查状态S是否合法,当状态S在棋盘种的时候,S就是合法的.
(defun verify (S)
(and (= (state-x S) 1)
(= (state-y S) 1)))
>(solve)
看了 m*n的棋盘中有一匹(或者“...的网友还看了以下:
人与人之间应该互相信任互相帮助翻译 2020-06-08 …
物体受力而发生变形,那么对于这个物体中任意指定点而言,关于它的应变正确的叙述是:A:该点处变形前任 2020-07-19 …
甲酸是一种一元有机酸.下列性质可以证明它是弱电解质的是()A.甲酸能与水以任意比互溶B.1mol• 2020-07-24 …
葡萄糖能否和水以任意比互溶?乙醇乙醛等能和水以任意比互溶,那么葡萄糖呢,溶于水会不会达到饱和,还是 2020-07-29 …
有一个12位数,每相邻的任意两个数字都构成一个两位质数,并且这些质数互不相同,满足上面要求的最大数 2020-07-31 …
同学之间应该互相帮助,遇到以下情况,你应该帮助的是()A、同学请你假冒其家长签名,向班主任请假B、考 2020-11-04 …
(1)若(1)表中的4种物质相互作用可生成一中新物质----碱式碳酸铜[化学式为Cu2(OH)2CO 2020-11-07 …
英语翻译什么是朋友,大多数人认为好朋友应该互相帮助,分享快乐,有的人如果不能和你同甘共苦,他们就不是 2020-11-25 …
根据下列化合物与单质相互转化的关系(如图),回答:(1)若化合物乙的溶液呈溶液蓝色,单质y是银白色固 2020-12-08 …
一道数学难题有一个12位数,每相邻的任意两个数字都构成一个两位质数,并且这些质数互不相同,满足上面要 2020-12-24 …