精華區beta ck54th329 關於我們 聯絡資訊
#include <iostream> #include <stdlib.h> #include <iomanip> using namespace std; void moveknight(); int movecolumn[8]={2,1,-1,-2,-2,-1,1,2},moverow[8]={-1,-2,-2,-1,1,2,2,1},move(0),knight[8][8]={0},order[8][8]={0}; int currentrow,currentcolumn,ans(0); void main() { for (int i(1);i<=8;i++) for (int j(1);j<=8;j++) for(int k(0);k<8;k++) if(i+moverow[k]<=8 && i+moverow[k]>0 && j+movecolumn[k]<=8 && j+movecolumn[k]>0)++order[i-1][j-1]; for (int ix(0);ix<8;ix++){ for (int iy(0);iy<8;iy++)cout<<setw(3)<<order[ix][iy]; cout<<endl; } cout<<endl; int initialrow(1),initialcolumn(1); knight[initialrow-1][initialcolumn-1]=++move; currentrow=initialrow; currentcolumn=initialcolumn; system("pause"); moveknight(); } void moveknight() { move++; for (int q(2);q<=8;++q){//ORDER if (q!=5 && q!=7){ for (int i(0);i<8;i++){//8 STEP currentrow+=moverow[i]; currentcolumn+=movecolumn[i]; if(order[currentrow-1][currentcolumn-1]==q ){ if (currentrow<=8 && currentrow>0 && currentcolumn<=8 && currentcolumn>0 ){//如果移完還在棋盤上 if(!knight[currentrow-1][currentcolumn-1]) {//沒走過 knight[currentrow-1][currentcolumn-1]=move;//標示走過(目前在) if (move<64)moveknight();//~63move,下一步 else { cout<<"Ans:"<<++ans<<endl; /*for (int ix(0);ix<8;ix++){ for (int iy(0);iy<8;iy++)cout<<setw(3)<<knight[ix][iy]; cout<<endl; } system("pause");*/ } knight[currentrow-1][currentcolumn-1]=0;//取消這步(回上一步) } } } currentrow-=moverow[i]; currentcolumn-=movecolumn[i]; } } } move--; } -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 210.85.118.7