轉載一個快速的騎士周遊程式
來自這裡
#include"stdio.h" #include"conio.h" #define N 8 /*How many the horse最好不要超過19(超出螢幕)*/ int top=0; struct stack { int x; int y; int step; }ma[N*N+1]={{0,0,0}}; void push(int a[][N],int i,int j,int m) { ma[top].x=i; ma[top].y=j; ma[top].step=m; a[i][j]=++top; } int pop(int a[][N]) { int temp; top--; a[ma[top].x][ma[top].y]=0; ma[top].x=0; ma[top].y=0; temp=ma[top].step+1; ma[top].step=0; return temp; } int judge(int i,int j,int a[][N]) /*Judge the position can jump */ { if(i>=0&&j>=0&&i<N&&j<N&&a[i][j]==0) return 1; return 0; } int jump(int i,int j,int a[][8]) { int col[]={2,1,-1,-2,-2,-1,1,2}; int row[]={-1,-2,-2,-1,1,2,2,1}; int t,ti=i,tj=j,count=0; for(t=0;t<8;t++){ ti+=row[t];tj+=col[t]; if(judge(ti,tj,a)) count++; /*How many ways for the horse can jump for second time.*/ ti-=row[t];tj-=col[t]; } return count; } int sort(int a[8],int b[8]) { int i,min=a[0],t=0; for(i=1;i<8;i++){ if(min>a[i]&&a[i]>-1&&a[i]<8){ min=a[i]; /*Find the Min-way the horse to jump*/ t=b[i]; } } return t; } void disp(int a[][N]) { int i,j; for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%4d",a[i][j]); printf("\n"); } } void horse(int x,int y) { int i=x,j=y,min,ti,tj,t,temp=0,flag=0,temp1=0; int count[8],num[8]={0}; int col[]={2,1,-1,-2,-2,-1,1,2}; int row[]={-1,-2,-2,-1,1,2,2,1}; int a[N][N]={{0}}; for(x=0;x<8;x++) count[x]=8; push(a,i,j,0); while(top<N*N) { ti=i;tj=j;temp1=0;flag=0; for(x=0;x<8;x++) count[x]=8; for(t=temp;t<8;t++,temp1++){ /*How many ways for the horse can jump for first time*/ ti+=row[t];tj+=col[t]; if(judge(ti,tj,a)){ count[temp1]=jump(ti,tj,a); num[temp1]=t; flag=1; } ti-=row[t];tj-=col[t]; } if(flag){ min=sort(count,num); ti+=row[min];tj+=col[min]; push(a,ti,tj,min); /*In the stack*/ i=ti;j=tj; temp=0; } else{ temp=pop(a); /*Return the stack*/ i=ma[top-1].x; j=ma[top-1].y; } } printf("\n\n"); disp(a); } int main() { int x,y; do{ printf("Please enter the X-position :"); scanf("%d",&x); printf("Please enter the Y-position :"); scanf("%d",&y); if(x>N||y>N||x<1||y<1) printf("Error! Try it again,X(1~%d),Y(1~%d)\n",N,N); }while(x>N||y>N||x<1||y<1); horse(x-1,y-1); //getch(); return 0; }
8*8棋盤輸入1,2,立刻出結果
作為比較 http://blog.csdn.net/jiajiayouba/article/details/9293379 6*6棋盤要60秒算出一個結果
https://software.intel.com/protected-download/145170/249799 5*6棋盤序列要29秒算出10個結果
相關文章
- 馬踏棋盤演算法(騎士周遊問題)----遞迴與貪心優化演算法演算法遞迴優化
- [轉]:如何快速構建一個簡單的程式
- 《爐石傳說》高勝率的平民騎士卡組分享
- 《空洞騎士》關卡設計解析
- 三個快速便捷的命令列小貼士命令列
- 《鏟子騎士》:“復古遊戲”的集大成者遊戲
- 拋棄「肉鴿」轉投「暗黑Like」,《元氣騎士新作》成色幾何?
- 每天刷個演算法題20160523:騎士巡遊的遞迴轉非遞迴解法演算法遞迴
- 用Unity重現《空洞騎士》的苦痛之路(4)——特效篇Unity特效
- 騰訊投資《傳送門騎士》開發商Keen GamesGAM
- 《形骸騎士》,一款融合彈幕、Furry等多要素Roguelite動作遊戲遊戲
- App Annie 8月指數:《塗鴉騎士3D版》空降下載榜榜首APP3D
- 《骷髏騎士:重製版》如何實現經典原作的初衷?
- 用Unity重現《空洞騎士》的苦痛之路(1):動作篇Unity
- 用Unity重現《空洞騎士》的苦痛之路(3)——地圖篇Unity地圖
- 用Unity重現《空洞騎士》的苦痛之路(2)——人物控制篇Unity
- 怎麼修復網站漏洞騎士cms的漏洞修復方案網站
- 《形骸騎士》入圍indie prize 角逐獨立遊戲奧斯卡遊戲
- 鏟子騎士:2D遊戲,3D引擎打造遊戲3D
- 漫威劇集《月光騎士》先導預告片釋出
- 異界騎士鏈遊開發NFT系統技術
- 蝙蝠俠阿甘騎士取消Mac/Linux版開發MacLinux
- 一個看似不起眼的市場,卻孕育出了空洞騎士、無題大鵝和Florence等創意遊戲遊戲
- 360安全衛士如何限制某個軟體程式的上傳和下載速度
- AI訓練的空洞騎士能打敗大黃蜂小姐姐嗎?AI
- 如何在阿里雲以外的伺服器上安裝安騎士阿里伺服器
- 一個下載網頁的程式網頁
- 獨立精品《郵差騎士》7月10日安卓首發安卓
- 一個碩士生的“技術”生涯薦
- (轉載)如何成為一個真正合格的程式設計師?程式設計師
- 攝像機?信標?深入解讀《元氣騎士》的視野機制
- abc145D 騎士走棋盤到達目的地的方案數
- 快速程式碼展示之快速的例子程式碼片段(轉)
- 一個很有意義的計算。。。(轉載)
- 三消霸主轉行? King旗下策略動作RPG新作《狂暴騎士》有點上頭
- 淺談《刺客信條》的敘事:刺客和聖殿騎士的衝突與融合
- 隨機的細胞騎士——《死亡細胞》Rougelike隨機性思路的得與失隨機
- 每個程式設計師需掌握的20個程式碼命名小貼士程式設計師