之前copy代码没看评论,结果这个马踏棋盘有问题的,可奈何我太蠢改不来,只能来求大佬了。
#include<iostream>
#include<iomanip>
using namespace std;
const int N = 8;
int qipan[8][8] = {0};
int tiaojian = 0;
bool xunyou(int i, int j)//目标格是否走过
{
if (qipan[i][j] == 0)
return false;
else return true;
}
bool jiexian(int i, int j) //目标格是否跳出棋盘
{
if (i >= 0 && i < N && j >= 0 && j < N)
return false;
else return true;
}
void way(int x, int y)//回溯主体
{
if (tiaojian== N * N)
return;
if (!xunyou(x, y) && !jiexian(x, y))
{ tiaojian++; qipan[x][y] = tiaojian;
way(x + 1, y + 2); way(x + 2, y + 1); way(x + 2, y - 1); way(x + 1, y - 2); way(x - 1, y - 2); way(x - 2, y - 1); way(x - 2, y + 1); way(x - 1, y + 2);//棋子所有走法
return;
}
return;
}
int main() //主函数
{
int x=0, y=3;
way(x, y);//传入初始位置
for (int heng = 0; heng< N; heng++)
{
for (int zong = 0; zong < N; zong++)
{ cout << setw(2) << qipan[heng][zong] << " "; }
cout << endl;
}
}