题目链接

题目大意:给一个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     }
View Code

相关文章: