(HW)uniquePath_2(障碍物)(Java)

 1 public class test
 2 {
 3     public static void main(String[] args)
 4     {
 5         Scanner input = new Scanner(System.in);
 6         int m = input.nextInt();
 7         int n = input.nextInt();
 8         int[][] aux = new int[][]{{0,0,1,0,0,0,0},{0,0,0,0,1,0,0},{0,1,0,0,0,0,0}};
 9         //iterative
10         System.out.println(uniquePath_2(m, n, aux));
11         //recursive
12         int i, j;
13         for(j = 0; j < aux[0].length && aux[0][j] == 0; j++);
14         int p = j;
15         for(i = 0; i < aux.length && aux[i][0] == 0; i++);
16         int q = i;
17         int[][] dp = new int[m][n];
18         //p: 第一行中障碍物的位置  q: 第一列中障碍物的位置(下标)
19         System.out.println(uniquePath_2(m - 1, n - 1, aux, dp, p, q));
20     }    
21     
22     //iterative
23     public static int uniquePath_2(int m, int n, int[][] aux)
24     {
25         int[][] dp = new int[m][n];
26         
27         //第一行赋值
28         for(int j = 1; j < aux[0].length && aux[0][j] != 1; j++)
29             dp[0][j] = 1;
30         //第一列赋值
31         for(int i = 1; i < aux.length && aux[i][0] != 1; i++)
32             dp[i][0] = 1;
33                 
34         for(int i = 1; i < dp.length; i++)
35             for(int j = 1; j < dp[0].length; j++)
36             {
37                 if(aux[i][j] == 1)
38                     dp[i][j] = 0;
39                 else
40                     dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
41             }
42         
43         return dp[dp.length - 1][dp[0].length - 1];
44     }
45     
46     public static int uniquePath_2(int m, int n, int[][] aux, int[][] dp, int p, int q)
47     {
48         //第一行
49         if(m == 0)
50         {
51             if(n >= p)
52                 return 0;
53             return 1;
54         }
55         //第一列
56         if(n == 0)
57         {
58             if(m >= q)
59                 return 0;
60             return 1;
61         }
62         
63         if(aux[m][n] == 1)
64             dp[m][n] = 0;
65         else
66         {
67             if(dp[m][n - 1] == 0)
68                 dp[m][n - 1] = uniquePath_2(m, n - 1, aux, dp, p, q);
69             if(dp[m - 1][n] == 0)
70                 dp[m - 1][n] = uniquePath_2(m - 1, n, aux, dp, p, q);
71             dp[m][n] = dp[m][n - 1] + dp[m - 1][n];
72         }
73         
74         return dp[m][n];
75     }
76 }

 

转载于:https://www.cnblogs.com/Huayra/p/10940069.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值