题目描述
有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。注意这次的网格中有些障碍点是不能走的。
给定一个int[][] map(C++ 中为vector >),表示网格图,若map[i][j]为1则说明该点不是障碍点,否则则为障碍。另外给定int x,int y,表示网格的大小。请返回机器人从(0,0)走到(x - 1,y - 1)的走法数,为了防止溢出,请将结果Mod 1000000007。保证x和y均小于等于50
思路:其实与机器人走方格1相似,只是注意在初始最上面跟最左边时,如果有一块为障碍,后面的都不可能到达,则为0;
中间有为障碍的直接走法数为0即可。
import java.util.*;
public class Robot {
public int countWays(int[][] map, int x, int y) {
// write code here
int array[][] =new int[x][y];
int i=0;
boolean xindex =false;
boolean yindex =false;
//当左侧第一排中有一个为障碍物,下面的点都无法达到了,故为0.
while(i<x){
if(xindex){
array[i][0]=0;
}
else{
if(map[i][0]==1){
array[i][0]=1;
}else{
array[i][0]=0;
xindex=true;
}
}
i++;
}//while
i=0;
while(i<y){
if(yindex){
array[0][i]=0;
}
else{
if(map[0][i]==1){
array[0][i]=1;
}else{
array[0][i]=0;
yindex=true;
}
}
i++;
}//while
for(int row=1;row<x;row++){
for(int col = 1;col<y;col++){
if(map[row][col]==1){
array[row][col]=(array[row-1][col]+array[row][col-1])%1000000007;
}else{
array[row][col]=0;
}
}//for col
}//for row
return array[x-1][y-1];
}
}