Member 13289075 Ответов: 3

Как найти путь робота, если он может двигаться только в 3-х направлениях:вправо, вниз, по диагонали вниз.


Представьте себе робота, сидящего в верхнем левом углу сетки NxN. Робот может двигаться только в трех направлениях: вправо , вниз и по диагонали вниз. Робот должен достичь нижнего правого угла сетки NxN. Представьте себе, что определенные квадраты являются “запретными” или “смещенными”, так что робот не может наступить на них. Напишите программу для определения количества возможных путей движения робота.Ввод точек смещения заканчивается,когда пользователь вводит координаты как (-1, -1).
Ввод:
Введите размер сетки
3
Введите точки сетки, которые являются смещениями
0 1
-1 -1
выход:
Пути для робота таковы
( 0 , 0 ) - ( 1 , 0 ) - ( 2 , 0 ) - ( 2 , 1 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 0 ) - ( 1 , 1 ) - ( 2 , 1 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 0 ) - ( 1 , 1 ) - ( 1 , 2 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 0 ) - ( 1 , 1 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 0 ) - ( 2 , 1 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 1 ) - ( 2 , 1 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 1 ) - ( 1 , 2 ) - ( 2 , 2 )
( 0 , 0 ) - ( 1 , 1 ) - ( 2 , 2 )


Что я уже пробовал:

#include <iostream>
using namespace std;
int numberOfPaths(int m, int n)
{
	int count[m][n];
	for (int i = 0; i < m; i++)
		count[i][0] = 1;
        for (int j = 0; j < n; j++)
		count[0][j] = 1;
	for (int i = 1; i < m; i++)
	{
		for (int j = 1; j < n; j++)
                   count[i][j] = count[i-1][j] + count[i][j-1]; 
	}
	return count[m-1][n-1];
}
int main()
{
	cout << numberOfPaths(3, 3);
	return 0;
}

//Это то,что я нашел для подсчета пути, если он может двигаться только в 2 направлениях:вправо, вниз.

PIEBALDconsult

Мы не будем делать за тебя домашнее задание.

3 Ответов

Рейтинг:
1

Patrice T

Похоже, нужно научиться некоторым методам анализа.
Вам нужно действовать по порядку

Цитата:
Представьте себе робота, сидящего в верхнем левом углу сетки NxN.
Робот должен достичь нижнего правого угла сетки NxN.
Представьте себе, что определенные квадраты являются “запретными” или “смещенными”, так что робот не может наступить на них.

Вам нужна сетка размера NxN, где вы будете помнить позиции, которые находятся вне пределов досягаемости.
Цитата:
Робот может двигаться только в трех направлениях: вправо , вниз и по диагонали вниз.
Напишите программу для определения количества возможных путей движения робота.

Вам нужно посчитать все пути. это означает, что робот может выбрать одно из 3 направлений до тех пор, пока движение не достигнет границы сетки или предельной позиции.
Это типичная рекурсивная задача: вам нужно написать функцию с фактической позицией, если позиция является конечной позицией, то это новый путь, в противном случае для каждого хода вы проверяете, разрешен ли ход, и если разрешен, вызываете эту же функцию с новой позицией.
Либо вы делаете это с помощью явной рекурсивной функции, либо с помощью неявной рекурсии с использованием обратного отслеживания.
Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому.
Создание алгоритма - это в основном поиск математики и необходимая адаптация к вашей реальной проблеме.


Рейтинг:
1

Member 13402059

( 0 , 0 ) - ( 1 , 1 ) - ( 1 , 2 ) - ( 2 , 2 )

( 0 , 0 ) - ( 1 , 1 ) - ( 2 , 2 )


Рейтинг:
0

Member 14477856

#включить <stdio.h>
int pospaths(int m, int n)
{
int count[m][n];
for (int i = 0; i < m; i++)
count[i][0] = 1;
for (int j = 0; j < n; j++)
count[0][j] = 1;
for (int i = 1; i < m; i++)
{
for (int j = 1; j < n; j++)
граф[я][Дж] = сумма[я-1][Дж] + графа[я][Дж-1] + графа[я-1][Дж-1];
}
обратный отсчет[m-1][n-1];
}
тап_п()
{
размер int;
printf("введите размер сетки\n");
scanf ("%d",&size);
printf("количество путей равно %d",pospaths(size, size));
возвращает 0;
}


CHill60

Выполнение за них чьей-то домашней работы никому не поможет. Если они все еще ищут решение через 2 года, то они, вероятно, заслужили провал курса