馬踏棋盤遞迴所有解
阿新 • • 發佈:2019-02-20
這次馬踏棋盤是用遞迴實現的,而且可以弄出來所有解,當時電腦跑的最快的都有40多萬解了,這個也可以看你電腦cpu好壞,一般超級本跑不動。這是實際上和八皇后是同一種性質的問題,都用到了回溯的思想,有接進行下一個,不行了退回去,在進行嘗試。不多說了,直接上程式碼;
#include<stdio.h> #include <stdlib.h> #include<conio.h> #define N 8 int cnt=1; // 記錄馬的位置 int n=1; int chess[8][8]={0}; //棋盤 int move[8][2]={ {1,-2},{2,-1}, {2,1},{1,2}, {-1,2},{-2,1}, {-2,-1},{-1,-2} }; void horse(int ,int ); void printhorse(); int main() //主函式 { chess[0][0]=1; horse(0,0); return 0; } void horse(int x,int y) //執行過程 { int i; int a,b; for(i=0;i<N;i++) { a=x+move[i][0]; b=y+move[i][1]; if(a>=0&&a<N&&b>=0&&b<N&&!chess[a][b]) { chess[a][b]=++cnt; if(cnt<64) { horse(a,b); } // 遞迴 else{ printhorse(); // exit(0); } chess[a][b]=0;//修改ab的值歸為0 cnt--; } } } void printhorse() //輸出馬踏棋盤 { int i,j; printf("輸出第%d組解:\n",n++); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%3d ",chess[i][j]); printf("\n"); } }
演示結果