2017-03-22 73 views
-1

这里是方法,理想情况下应该通过在板上放置Q来解决八皇后问题,这样它们都不会相互威胁,但我似乎无法阻止它无限递归。从这个递归方法获取堆栈溢出?

public static void solve(int row, int col, int size, char[][] array) { 
    for (int i = 0; i < size - 2; i++) { 
     if (isSafe(row, col, size, array)) { 
      array[i][col] = 'Q'; 
     } else { 
      if (col < size - 2) { 
       solve(row, col++, size, array); //changed ++ to +1 
      } 
     } 
    } 
} 

为了清楚起见,这里是包括 'isSafe' 的方法:

public static boolean isSafe(int row, int col, int size, char[][] array) { 
    //check column 
    for (int i = 0; i < size - 1; i++) { 
     if (array[i][col] == 'Q') { 
      return false; 
     } 
    } 
    //horizontal 
    for (int i = size - 1; i >= 0; i--) { 
     if (array[row][i] == 'Q') { 
      return false; 
     } 
    } 
    //up diagonal 
    while (row > 0 && col > 0) { 
     int x = row; 
     int y = col; 
     if (array[row - 1][col - 1] == 'Q') { 
      return false; 
     } else { 
      x--; 
      y--; 
     } 
    } 
    //down diagonal 
    while (row < size - 1 && col > 0) { 
     int x = row; 
     int y = col; 
     if (array[row + 1][col - 1] == 'Q') { 
      return false; 
     } else { 
      x++; 
      y--; 
     } 
    } 
    return true; 
} 

谢谢你,你可以在此有何启示。
编辑:所以我只是想通过将'++'更改为'+1'我能够停止堆栈溢出,但我的方法不像我想要的那样递归所以问题仍然存在

+8

可能重复[什么是调试器,它如何帮助我诊断问题?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-如何可以帮助我诊断问题) – Raedwald

+0

“仍然不会像我想要的那样递归[原文]”不是问题说明。显示输出和调试跟踪。 – Prune

回答

0

问题与solve(row, col++, size, array); 科列将不会增加,直到解决的呼叫后。 你需要使用solve(row, ++col, size, array);