<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C++貪婪演演算法實現馬踏棋盤的具體程式碼,供大家參考,具體內容如下
步驟1:初始化馬的位置(結構體horse {x, y})
步驟2:確定馬從當前點出發,可跳躍的附近8個點,以結構體Jump陣列給出,但需判斷當前給出的附近8個點是否曾經存取過,或者是否這8個點超出棋盤尺寸。
步驟3:跟據步驟2確定跳躍的點,分別計算可跳躍點的下下一步,可跳躍點的個數。並選出下下步可跳躍點數最少的點作為馬下一步跳躍的點。(舉例說明:馬當前所在點座標(4,4),下一步可跳躍點有(5,2),(6,3),且(5,2)下一步可跳躍點有3個,(6,3)下一步可跳躍點2個;3 > 2這個時候,選擇下下一跳小的點進行跳躍,則馬下一跳為(6,3))
#pragma once #include <iostream> #include <math.h> using namespace std; #define SAFE_DELETE(x) if (x != NULL) {delete(x); x = NULL;} #define SAFE_DELETE_ARR(x) if (x != NULL) {delete[](x); x = NULL;} #define PRING_ARR(title, arr, n) {cout << title << " "; for (int i=0; i<n; i++) {cout << arr[i] << " ";} cout << endl;} #define INF 9999999 typedef struct { int x; int y; }Location; typedef struct { int delx; int dely; }Jump; class HorseRun { private: int** altas; int N; //棋盤的寬 Location horse; //馬當前的位置 public: HorseRun() { N = 8; altas = new int* [N](); for (int j = 0; j < N; j++) { altas[j] = new int[N](); memset(altas[j], 0, sizeof(int) * N); } //隨機生成馬的初始位置 horse = { rand() % N, rand() % N }; altas[horse.x][horse.y] = 1; cout << "馬初始位置:" << "(" << horse.x << "," << horse.y << ")" << endl; Visit(); } ~HorseRun() { for (int i = 0; i < N; i++) SAFE_DELETE_ARR(altas[i]); SAFE_DELETE_ARR(altas); } inline void Visit() { Jump jump[8] = { {1,-2}, {2, -1}, {2, 1}, {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2} }; int max_visit = 63; int forward_x, forward_y, forward_xx, forward_yy, w_cnt, min_cnt, tmp_run_x, tmp_run_y; while (max_visit-- > 0) { min_cnt = INF; //棋子可跳八個方位 for (int i = 0; i < 8; i++) { forward_x = horse.x + jump[i].delx; forward_y = horse.y + jump[i].dely; //判斷這兩個座標是否有效 if (forward_x < 0 || forward_x >= N || forward_y < 0 || forward_y >= N || altas[forward_x][forward_y] == 1) continue; w_cnt = 0; for (int j = 0; j < 8; j++) { forward_xx = forward_x + jump[j].delx; forward_yy = forward_y + jump[j].dely; if (forward_xx < 0 || forward_xx >= N || forward_yy < 0 || forward_yy >= N || altas[forward_xx][forward_yy] == 1) continue; w_cnt++; } if (min_cnt > w_cnt) { min_cnt = w_cnt; tmp_run_x = forward_x; tmp_run_y = forward_y; } } //棋子移動判斷 if (min_cnt == INF) { cout << "沒有找到可以移動的地方" << endl; break; } else { horse.x = tmp_run_x; horse.y = tmp_run_y; altas[tmp_run_x][tmp_run_y] = 1; cout <<"第"<< 63 - max_visit << "步," << "棋子當前移動到:" << "(" << tmp_run_x << ", " << tmp_run_y << ")" << endl; } } } }; #define _CRT_SECURE_NO_WARNINGS true #include "HorseRun.h" int main() { HorseRun app; return 0; }
執行結果輸出1-63步馬行駛的具體路徑資訊:
中間還有很多輸出省略。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45