2015-09-13 3 views
-4

Человек начинается с самого верхнего левого угла сетки. Каждая ячейка сетки равна 0,1,2,3,4,5,6 или 7. Из любой ячейки он может перейти только в правую ячейку, если эта ячейка равна 1, он может перейти только в нижнюю ячейку, если эта ячейка 2, он может перейти только к своей диагонально противоположной ячейке, если эта клетка равна 3, он может перейти вправо и нижней клетке, если эта клетка равна 4, он может перейти вправо и по диагонали противоположной ячейке, если эта ячейка равна 5, он может пойти к нижней и диагонально противоположной ячейке, если эта ячейка равна 6, он может перейти в правую и нижнюю и диагонально противоположную ячейку, если эта ячейка равна 7, и он не может перемещаться из этой ячейки, если эта ячейка равна 0. Input1: массив Integer, имеющий два элемента: m, n, которые изображают строки и столбцы сетки соответственно. Ввод 2: массив целых чисел, содержащий m * n элементовцелочисленный массив/перемещение 2D-матрицы

Ввод 1: {4,6} Ввод 2: {1,3,0,0,0,0,0,0,4,5,1,0,0,0,0,6,7,6,0,0,0,0,5, 0}

+1

сделать добросовестную попытку решить эту проблему самостоятельно первой и разместить код, который вы пробовали. Кроме того, вы даже не отправляли сообщения. Где заканчивается человек? Каково минимальное количество модификаций матрицы, чтобы гарантировать, что человек заканчивается в правом нижнем углу? Это может быть много вещей ... –

ответ

0

for (2,2) : (1,1,1,1) ваш код сломается.

это должно дать 0 в результате, но это даст 1

0
int count=0; 
int no_of_path(int input1[],int input2[]) 
{ 
    int mat[][] = new int[input1[0]][input1[1]]; 
    int c=0; 
    for (int i=0;i<input1[0];i++) 
    { 
     for (int j=0;j<input1[1];j++){ 
      mat[i][j]=input2[c++];} 
    } 
    int nextElements=findNext(0,0,mat); 
    System.out.println(nextElements); 
    return 0; 
} 
int findNext(int i,int j,int input[][]) 
{ 
    if(i==input.length-1 && j==input[0].length-1){ 
     return count++; 
    } 
    switch (input[i][j]){ 
     case 0: 
      if(i==input.length-1 && j==input[0].length-1){ 
       return count; 
      } 
     case 1: //right 
      if(j<input[0].length-1) 
       return findNext(i,j+1,input); 
     case 2: //lower 
      if(i<input.length-1) 
       return findNext(i+1,j,input); 
     case 3: //diagonal 
      if(i<input.length-1 && j<input[0].length-1) 
       return findNext(i+1,j+1,input); 
     case 4: //right,Lower 
      if(i<input.length-1 && j<input[0].length-1) 
       return findNext(i,j+1,input)+ findNext(i+1,j,input); 
     case 5: //right,diagonal 
      if(i<input.length-1 && j<input[0].length-1) 
       return findNext(i,j+1,input)+findNext(i+1,j+1,input); 
     case 6: //Lower , Diagonal 
      if(i<input.length-1 && j<input[0].length-1) 
       return findNext(i+1,j,input)+findNext(i+1,j+1,input); 
     case 7: //right,diagonal lower 
      if(i<input.length-1 && j<input[0].length-1) 
       return findNext(i,j+1,input)+findNext(i+1,j+1,input)+findNext(i+1,j,input); 
    }return count; 
} 
Смежные вопросы