题目大意:给一个m*n的方格,从左上角走到右下角,中间无任何障碍,问有多少种走法。
法一:DFS,超时,简单模板深搜,无任何剪枝,结果一半的数据超时。代码如下:
1 public int uniquePaths(int m, int n) { 2 int f[][] = {{0, 1}, {1, 0}}; 3 boolean vis[][] = new boolean[m][n]; 4 return dfs(m, n, 0, 0, 0, f, vis); 5 } 6 public static int dfs(int m, int n, int x, int y, int cnt, int f[][], boolean vis[][]) { 7 if(x == m - 1 && y == n - 1) { 8 System.out.println("answer:" + cnt); 9 cnt++; 10 return cnt; 11 } 12 for(int i = 0; i < 2; i++) { 13 int cnt_x = x + f[i][0]; 14 int cnt_y = y + f[i][1]; 15 if(cnt_x < m && cnt_y < n && vis[cnt_x][cnt_y] == false) { 16 vis[cnt_x][cnt_y] = true; 17 cnt = dfs(m, n, cnt_x, cnt_y, cnt, f, vis); 18 vis[cnt_x][cnt_y] = false; 19 } 20 } 21 return cnt; 22 }