驗證象棋中的馬是否可以走遍整個棋盤_第1頁
驗證象棋中的馬是否可以走遍整個棋盤_第2頁
驗證象棋中的馬是否可以走遍整個棋盤_第3頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/ MyStack- h /#includeiostream>#include<windows h>using namespace std;typedef struct tagDIRECTIONint x; /馬行走的方向int y;DIRECTION, *PDIRECTION;typedef struet tagSTEPint x; /馬當(dāng)前的橫坐標int y; /馬當(dāng)前的縱坐標int direction; / 馬的方向有八個,從 0 到 7 STEP, *PSTEP;typedef struct tagMY_STACK int MAX; /棧能容納的最大元素個數(shù)int t

2、op; /棧頂指針tagSTEP* pStep; /棧的元素數(shù)組MYSTACK, *PMYSTACK:/創(chuàng)建一個棧,有n個元素/PMYSTACK CreateStack(int n);/彈出棧頂元素/STEP POP(PMYSTACK MyStack):/ /向棧中壓入一個元素/int PUSH(PMYSTACK MyStack, STEP Step);#include/zMyStack. h"/ /創(chuàng)建一個棧,有n個元素/PMYSTACK CreateStack(int n)int i = 0 ;PMYSTACK MyStack 二 NULL;MyStack 二 new MYSTA

3、CK:辻(MyStack 二二 NULL )return NULL;MyStack->MAX = n; /棧中最大能容納的元素MyStack->top = -1; /默認棧指針指向第0個元素MyStack>pStep = new STEPtn;return NULL;for( i 二 0 ; i n ; i+ )MyStack->pStepi. direction = 0 ; / 默認馬的方向,從 0 到 7 return MyStdck;/彈出棧頂元素/STEP POP(PMYSTACK MyStack)辻(MyStack->top < 0 )cout&q

4、uot;Stack overflow!,<<endl:exit(-1);return MyStack->pStep MyStack-top ; /向棧中壓入一個元素/int PUSH(PMYSTACK MyStack, STEP Step)辻(MyStack>top >= MyStack->N!AX )cout<<,Stack overflow! "«endl;return 0;MyStack->top += 1;MyStack->pStep MyStdck-top 二 Step;return 1;/ Main函數(shù)

5、所在文件/#define MAXELEMENT 10000int InitMAP(int MAP10 9, DIRECTION DirectionEl) ; / 初始化棋盤和 馬的八個行走方向int MyGotoXY (int y, int x) ; / y 是縱坐標,x 是橫坐標int PrintMAP(int MAP10 9); / 打印出整個棋盤int CheckFull (int MAP10 9) : /檢查馬是否已經(jīng)走過了整個棋盤了int Checkout (int MAP10 9, STEP Step) : / 檢查馬是否走出邊界int HorseGo(int MAP109,PMY

6、STACK pMyStack, DIRECTION D讓ection); /處理馬的行走過程int mdin()int MAP10 9 ; /棋盤,九行十列DIRECTION Direction/; /正常情況下,馬有八種走法PMYSTACK pMyStack 二 NULL;system (''COLOR 9E") ; / 設(shè)置顏色pMyStack 二 CreateStack (MAXELEMENT) ; / 創(chuàng)建一個棧return 0;InitMAP(MAP, Direction); 初始化棋盤和馬的八個行走方向 if( HorseGo( MAP, pMyStack

7、, Direction )=1)cout«"馬可以走遍整個棋盤!,«endl;elsecout«"馬走不了整個棋盤!"endl;return 0;/初始化棋盤和馬的八個行走方向/int InitMAP(int MAP109, DIRECTION DirectionEl)for( i 二 0 ; i 10 ; i + )for( j 二 0 ; j 9 ; j + )MAPij二 0;MAP0l二1 ; /馬從這個位置開始走/特別注意:X是橫坐標,Y是縱 坐標/Direct ion 0. x = -1; / 左上角DirectiontO

8、. y 二一2;DirectionEl. x = -2;DirectionEl. y = T;Direct ion 2. x = - 2; / 左下角Direction2. y 二 1;Direction3.x 二 T;Direction3 y 二 2;Direction4. x = 1; / 右下角Direction4 y 二 2;Direction5 x 二 2;Direction5 y 二 1;Direct ion 6. x = 2; / 右上角Direction6.y 二 T;Direction7 x = 1;Direction7.y 二 一2;return 1 ;/打印出整個棋盤/f

9、or( i = 0 ; i < 10 ; i+ )for( j 二 0 ; j 9 ; j+ )printf (,%5d,> MAPi j);cout<<endl<<endl;cout<<endl<<endl;return 1;/ y是縱坐標,x是橫坐標/int MyGotoXY(int y, int x)COORD Position ;Position. X = x;Position. Y = y;HANDLE hOutPut 二 GetStdHandle(STD_OUTPUT_HANDLE) ; / 獲取輸出句柄 if( hOut

10、Put = INVALID_HANDLE_VALUE )return 0 ;SetConsoleCursorPosition(hOutPut, Position);return 1;/檢查馬是否已經(jīng)走過了整個棋盤了/int CheckFull(int MAP109)int i = 0 , j 二 0 ;for( i = 0 ; i < 10 ; i + )for( j 二 0 ; j 9 ; j + )if( MAPliHj二二 0 )return 0; /棋盤還沒有滿就返回0return 1; /棋盤滿了就返回1/檢查馬是否走出邊界/int Checkout(int MAP109, S

11、TEP Step)/ X是橫坐標,Y是縱坐標辻(Step, x < 0 )(Step.y < 0 )(Step, x >= 9 )(Step, y >= 10 )return 0 ; /超出邊界,并且沒有走過這里就返回0 elseif ( MAP Step, y Step, x = 0 ) / 沒走過的才可以走return 1 ; /沒有超出邊界就返回1elsereturn 0 ;/處理馬的行走過程/int HorseGo(int MAP109,PMYSTACK pMyStack, DIRECTION DirectionEl)int i 二 0 , j 二 0 ;int

12、 flag二0 ; /記錄是否地圖已經(jīng)滿了int Dir二0; /八個方向之一STEP TempStep;TempStep .x = 1;TempStep. y 二 0;TempStep .direction = 0;PUSH(pMyStack, TempStep) ; / 壓入第一個元素,PrintMAP(MAP) ; /把地圖顯示出來MyGotoXY(21, 15) ; / 版權(quán)打印cout<</zMade By Mai_Longzz<<endl;while( true )Dir = pMyStack-pStep pMyStack->top direction

13、 ;辻(Dir >= 8 ) /該點的方向都測試完了。POP(pMyStack);continue;if ( pMyStack->top < 0 ) /所有元素彈出來之后,還沒有走完就結(jié)束了break;TempStep.x = pMyStack->pStepZ pMyStack一>top .x + DirectionDir.x ; /TempStep. y 二 pMyStack->pStep pMyStack->top y + DirectionDir.y ;TempStep.direction = pMyStack一pStep pMyStack-&g

14、t;top direction ;pMyStack->pStep pMyStack->top direction += 1 ;辻(Checkout (MAP, TempStep)二二1 ) /超出邊界,并且沒有走過這里TempStep. direction = 0 ; /初始化在這個地方的方向PUSH(pMyStack, TempStep) : / 就往下走一步MAPTempStep. y TempStep. x = t+ ; / 在地圖上留下一個腳印/PrintMAP(MAP) ; /把地圖顯示出來(這樣會閃爍)/這部分代碼可以讓你清楚的看到馬的行走路徑MyGotoXY ( TempStep. y * 2, TempStep. x * 5 ) ; / 設(shè)置光標到這個位置/'HANDLE hConsole 二 GetStdHandle (STD_OUTPUT_HANDLE):/SetConsoleTextAttribute(hConsole, 2 );/highvideoO ;printf(&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論