數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤學(xué)習(xí)資料_第1頁
數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤學(xué)習(xí)資料_第2頁
數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤學(xué)習(xí)資料_第3頁
數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤學(xué)習(xí)資料_第4頁
數(shù)據(jù)結(jié)構(gòu) 馬踏棋盤學(xué)習(xí)資料_第5頁
全文預(yù)覽已結(jié)束

付費(fèi)下載

下載本文檔

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

文檔簡介

#include<stdio.h>#include"stdlib.h"#defineM8intboard[M][M];typedefstructdirect{intr,c,pathnum;}dir;//用來計(jì)算當(dāng)前位置可走的方向數(shù)目intpathnum(introw,intcn){inta,b,count=0;a=row;b=cn;//當(dāng)前位置可選方向可以走通,則數(shù)目加一if(a-2>=0&&b-1>=0&&board[a-2][b-1]==0) count++;if(a-2>=0&&b+1<M&&board[a-2][b+1]==0) count++;if(a+2<M&&b-1>=0&&board[a+2][b-1]==0) count++;if(a+2<M&&b+1<M&&board[a+2][b+1]==0) count++;if(a-1>=0&&b+2<M&&board[a-1][b+2]==0) count++;if(a-1>=0&&b-2>=0&&board[a-1][b-2]==0) count++;if(a+1<M&&b+2<M&&board[a+1][b+2]==0) count++;if(a+1<M&&b-2>=0&&board[a+1][b-2]==0) count++;returncount;}//尋找路徑函數(shù)voidfindway(intm,intn){dirf[8],path;inti,j,k,stepnum;stepnum=1;i=m;j=n;while(stepnum<M*M&&i>=0&&j>=0){board[i][j]=stepnum; printf("%d,%d,%d",i,j,board[i][j]);path.pathnum=8;//用來標(biāo)志可走方向數(shù)的最小值for(k=0;k<8;k++)//對方向數(shù)組賦初值{f[k].r=-1;f[k].c=-1;}//如果第一個方向可走,則將坐標(biāo)及可選方向數(shù)賦給f[0],以下同理if(i-2>=0&&j-1>=0){f[0].r=i-2;f[0].c=j-1;f[0].pathnum=pathnum(f[0].r,f[0].c);}if(i-2>=0&&j+1<M){f[1].r=i-2;f[1].c=j+1;f[1].pathnum=pathnum(f[1].r,f[1].c);}if(i+2<M&&j-1>=0){f[2].r=i+2;f[2].c=j-1;f[2].pathnum=pathnum(f[2].r,f[2].c);}if(i+2<M&&j+1<M){f[3].r=i+2;f[3].c=j+1;f[3].pathnum=pathnum(f[3].r,f[3].c);}if(i-1>=0&&j+2<M){f[4].r=i-1;f[4].c=j+2;f[4].pathnum=pathnum(f[4].r,f[4].c);}if(i-1>=0&&j-2>=0){f[5].r=i-1;f[5].c=j-2;f[5].pathnum=pathnum(f[5].r,f[5].c);}if(i+1<M&&j-2>=0){f[6].r=i+1;f[6].c=j-2;f[6].pathnum=pathnum(f[6].r,f[6].c);}if(i+1<M&&j+2<M){f[7].r=i+1;f[7].c=j+2;f[7].pathnum=pathnum(f[7].r,f[7].c);}//尋找當(dāng)前位置的八個方向中的可走方向數(shù)最少的方向作為新的方向for(k=0;k<8;k++) if(f[k].r>=0&&f[k].c>=0&&f[k].pathnum<=path.pathnum&&board[f[k].r][f[k].c]==0&&f[k].pathnum>0) { path.pathnum=f[k].pathnum; path.r=f[k].r; path.c=f[k].c; }i=path.r;j=path.c;stepnum++;} board[i][j]=M*M-1;//倒數(shù)第二個踩入點(diǎn); //尋找最后一個踩入點(diǎn);if(i-2>=0&&j-1>=0&&board[i-2][j-1]==0){i=i-2;j=j-1;}elseif(i-2>=0&&j+1<M&&board[i-2][j+1]==0){i=i-2;j=j+1;}elseif(i-1>=0&&j+2<M&&board[i-1][j+2]==0){i=i-1;j=j+2;}elseif(i+1<M&&j+2<M&&board[i+1][j+2]==0){i=i+1;j=j+2;}elseif(j+2<M&&i+1<=M&&board[i+2][j+1]==0){i=i+2;j=j+1;}elseif(i+2<M&&j-1>=0&&board[i+2][j-1]==0){i=i+2;j=j-1;}elseif(i+1<M&&j-2>=0&&board[i+1][j-2]==0){i=i+1;j=j-2;}elseif(i-1>=0&&j-2>=0&&board[i-1][j-2]==0){i=i-1;j=j-2;}board[i][j]=M*M;printf("%d,%d,%d",i,j,board[i][j]);}voidmain(){intr,c,i,j;printf("請輸入馬在棋盤上的首位置,例如3,4,注意兩個數(shù)之間用逗號隔開且都要小于等于7:\n");sca

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論