这道题学到了在做回溯时,先把点加入到path中,然后根据子情况来决定success这个变量,从而决定之前加入的点是否有必要的。如果子情况返回的是false,则这个点也没有必要加入到path中,就可以移除了。
还有一个是,我的解答中每次函数只对当前点进行isFree的判断,官方答案中却对下一个节点进行判断。我还是觉得我的更直观一些。
package Recursion;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Hashtable;
import CtCILibrary.AssortedMethods;
/**
* Imagine a robot sitting on the upper left comer of an X by Ygrid. The robot
* can only move in two directions: right and down. How many possible paths are
* there for the robot to go from (0, 0) to (X, Y) ?
*
* 在一个N*N矩阵的左上角坐着一个机器人,它只能向右运动或向下运动。那么, 机器人运动到右下角一共有多少种可能的路径?
进一步地,如果对于其中的一些格子,机器人是不能踏上去的。设计一种算法来获得所有可能的路径。
*
*/
public class S9_2 {
public static int[][] maze = new int[10][10];
public static void main(String[] args) {
maze = AssortedMethods.randomMatrix(10, 10, 0, 4);
AssortedMethods.printMatrix