我想测试我是否理解回溯,所以我尝试了骑士问题。但是我的代码似乎不起作用。它似乎做了一个无限循环,所以也许我对路径的跟踪没有很好地执行。所以我想知道我对这个问题的理解有什么遗漏。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 8
int board[8][8]= {
-1,-1,-1,-1,-1,-1,-1,-1, //1
-1,-1,-1,-1,-1,-1,-1,-1, //2
-1,-1,-1,-1,-1,-1,-1,-1, //3
-1,-1,-1,-1,-1,-1,-1,-1, //4
-1,-1,-1,-1,-1,-1,-1,-1, //5
-1,-1,-1,-1,-1,-1,-1,-1, //6
-1,-1,-1,-1,-1,-1,-1,-1, //7
-1,-1,-1,-1,-1,-1,-1,-1, //8
};
bool isSafe(int x, int y)
{
return ( x >= 0 && x < N && y >= 0 &&
y < N && board[x][y] == -1);
}
int SolveKnight_From_One_Point (int x,int y , int number_Moov) {
if (number_Moov == N*N)
return 1;
if (isSafe(x,y)){
board[x][y] = number_Moov;
if (SolveKnight_From_One_Point(x-2,y+1,number_Moov+1)==1) …Run Code Online (Sandbox Code Playgroud)