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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

马踏棋盘算法(骑士周游问题)

發布時間:2025/3/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 马踏棋盘算法(骑士周游问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要求:

國家棋盤為8*8的方格棋盤,將"馬"放在任意指定方格中。最終讓馬走遍64個方格。

關于象棋中馬的走法
如下圖所示:



下面是代碼:

#include <stdio.h> #include <time.h> #include <Windows.h>#define X 8 #define Y 8int chess[X][Y];// 找到基于(x,y)位置的下一個可走的位置 int nextxy(int *x, int *y, int count) {switch (count){case 0:if (*x + 2 <= X - 1 && *y - 1 >= 0 && chess[*x + 2][*y - 1] == 0) //3這個位置{*x = *x + 2;*y = *y - 1;return 1;}break;case 1:if (*x + 2 <= X - 1 && *y + 1 <= Y - 1 && chess[*x + 2][*y + 1] == 0){*x = *x + 2;*y = *y + 1;return 1;}break;case 2:if (*x + 1 <= X - 1 && *y - 2 >= 0 && chess[*x + 1][*y - 2] == 0){*x = *x + 1;*y = *y - 2;return 1;}break;case 3:if (*x + 1 <= X - 1 && *y + 2 <= Y - 1 && chess[*x + 1][*y + 2] == 0){*x = *x + 1;*y = *y + 2;return 1;}break;case 4:if (*x - 2 >= 0 && *y - 1 >= 0 && chess[*x - 2][*y - 1] == 0){*x = *x - 2;*y = *y - 1;return 1;}break;case 5:if (*x - 2 >= 0 && *y + 1 <= Y - 1 && chess[*x - 2][*y + 1] == 0){*x = *x - 2;*y = *y + 1;return 1;}break;case 6:if (*x - 1 >= 0 && *y - 2 >= 0 && chess[*x - 1][*y - 2] == 0){*x = *x - 1;*y = *y - 2;return 1;}break;case 7:if (*x - 1 >= 0 && *y + 2 <= Y - 1 && chess[*x - 1][*y + 2] == 0){*x = *x - 1;*y = *y + 2;return 1;}break;default:break;}return 0; }void print() {int i, j;for (i = 0; i < X; i++){for (j = 0; j < Y; j++){printf_s("%2d\t", chess[i][j]);}printf_s("\n");}printf_s("\n"); }// 深度優先遍歷棋盤 // (x,y)為位置坐標 // tag是標記變量,每走一步,tag+1 int TravelChessBoard(int x, int y, int tag) {int x1 = x, y1 = y, flag = 0, count = 0;chess[x][y] = tag;// 如果tag==X*Y,則完成整個棋盤的遍歷if (tag == X*Y){print();return 1;}flag = nextxy(&x1, &y1, count);while (0 == flag && count < 7){count++;flag = nextxy(&x1, &y1, count);}while (flag){if (TravelChessBoard(x1, y1, tag + 1)){return 1;}x1 = x;y1 = y;count++;flag = nextxy(&x1, &y1, count);while (0 == flag && count < 7){count++;flag = nextxy(&x1, &y1, count);}}if (0 == flag){chess[x][y] = 0;}return 0; }int main() {int i, j;clock_t start, finish;start = clock();for (i = 0; i < X; i++){for (j = 0; j < Y; j++){chess[i][j] = 0;}}if (!TravelChessBoard(2, 0, 1)){printf_s("馬踏棋盤失敗\n");}finish = clock();printf_s("\n本次計算一共耗時: %f秒\n\n", (double)(finish - start) / CLOCKS_PER_SEC);system("pause");return 0; } 運行結構如下:



總結

以上是生活随笔為你收集整理的马踏棋盘算法(骑士周游问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

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