Робот сидит в верхнем левом углу сетки NxN. Робот может двигаться только в двух направлениях: вправо и вниз, где некоторые из ячеек мертвы, т.е. робот не может войти в эту ячейку. Сколько возможных путей есть для робота?
Это можно решить с помощью обратного отслеживания, но сложность времени слишком высока. Я решил эту проблему с помощью обратного отслеживания, но в худшем случае требуется O (2 ^ n).
bool exist(bool a[][], int i, int j,int N){
return i>=0 && j >=0 && i < N && j < N;
}
int search(bool a[][], int i, int j,int N){
if(!exist(a,i,j,N) || a[i][j] == 1)
return 0; // no path here.
if(i == N-1 && j == N - 1){
return 1; // 1 path here.
}
a[i][j] = 1; // mark that we have seen this spot here
int paths = 0; // introduce a counter...
paths += search(a, i,j+1,N); // add the additional paths as we find them
paths += search(a, i+1,j,N);
a[i][j] = 0;
return paths; // return the number of paths available from this point.
}
Здесь ячейка с 1 представляет собой мертвую ячейку.Есть ли способ уменьшить временную сложность с помощью DFS или динамического программирования и т. д.?