日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)

發布時間:2025/3/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明:騎士旅游(Knight tour)在十八世紀初倍受數學家與拼圖迷的注意,它什么時候被提出已不可考,騎士的走法為西洋棋的走法,騎士可以由任一個位置出發,它要如何走完[所有的位置?

解法:騎士的走法,基本上可以使用遞回來解決,但是純綷的遞回在維度大時相當沒有效率,一個聰明的解法由J.C. Warnsdorff在1823年提出,簡單的說,先將最難的位置走完,接下來的路就寬廣了,騎士所要走的下一步,「為下一步再選擇時,所能走的步數最少的一步。」,使用這個方法,在不使用遞回的情況下,可以有較高的機率找出走法(找不到走法的機會也是有的)。

在一個n m 格子的棋盤上,有一只國際象棋的騎士在棋盤的左下角,騎士只能根據象棋的規則進行移動,要么橫向跳動一格縱向跳動兩格,要么縱向跳動一格橫向跳動兩格。 例如, n=4,m=3 時,若騎士在格子(2;1) ,則騎士只能移入下面格子:(1;3),(3;3) 或 (4;2);對于給定正整數n,m,I,j值 (m,n<=50,I<=n,j<=m) ,你要測算出從初始位置(1;1) 到格子(i;j)最少需要多少次移動。如果不可能到達目標位置,則輸出"NEVAR"。

騎士旅游的偽碼:

FOR(m = 2; m <= 總步數; m++)

[

測試下一步可以走的八個方向,記錄可停留的格數count。

IF(count == 0)

[

游歷失敗

]

ELSE IF(count == 1)

[

下一步只有一個可能

]

ELSE

[

找出下一步的出路最少的格子

如果出路值相同,則選第一個遇到的出路。

]

走最少出路的格子,記錄騎士的新位置。

]

#include int board[8][8] = {0};int main(void) {int startx, starty;int i, j;printf("輸入起始點:");scanf("%d %d

總結

以上是生活随笔為你收集整理的骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。