#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