2013-12-18 89 views
1

我似乎无法找到为什么在输出中还剩下一些-1。我应该执行什么来使其占据所有空间。我仔细检查了流程,但我认为问题是当我调用位置为(0,0)的main函数时。但是,如果没有解决方案的位置(0,0) 帮助赞赏,递归函数本身不会找到替代解决方案。KTouring递归代码

#define N 8 
#include<stdio.h> 
#include<stdlib.h> 

int xMove[8] = {1,1,-1,-1,2,2,-2,-2}; 
int yMove[8] = {2,-2,2,-2,1,-1,1,-1}; 

int isSafe(int x, int y, int board[N][N]) 
{ 
    if(x >= 0 && x < N && y >= 0 && y < N && board[x][y] == -1) 
     return 1; 
    else 
     return 0; 
} 

int SolveKT(int x, int y, int imove, int board[N][N]) 
{ 
    int next_x, next_y, i; 

    if(imove == N * N) 
     return 1; 

    for(i = 0;i < N; i++) 
    { 
     next_x = x+xMove[i]; 
     next_y = y+yMove[i]; 

     if(isSafe(next_x,next_y,board)) 
     { 
      board[next_x][next_y]=imove; 

      if(SolveKT(next_x,next_y,++imove,board)) 
       return 1; 
      else 
       board[next_x][next_y]=-1;  
     }//close if 
    }//close for 

    return 0; 
}//close SolveKT 

int main() 
{ 
    int i,j,res,cboard[N][N]={[0 ... N-1][0 ... N-1]=-1}; 
    res = SolveKT(0,0,0,cboard); 

    if(res) 
    { 
     for(i=0;i<N;i++) 
     { 
      for(j=0;j<N;j++) 
       printf("%d ",cboard[i][j]); 
      printf("\n"); 
     } 
    } 

    return 0; 
}//close main 
+0

这是什么:'[0 ... N-1] [0 ... N-1] = - 1'?那是C吗? –

+0

我认为OP只是用它来让SO用户更清楚地进行初始化。国际海事组织memset()会更合适.... – fvdalcin

+0

这是一个相当重的处理。 – BLUEPIXY

回答

1

改用++imove的,你应该使用imove+1,因为你不应该在功能改变变量imove

但是,这个算法非常慢,你应该重新考虑它。