Nabeel Munir Ответов: 3

Здравствуйте, я пытаюсь написать программу "робот в лабиринте" на языке с++.


Мне нужно создать 2d-массив с 20 строками и столбцами, что я и сделал, 2-е дело в том, что мне нужно поместить элемент(робота) в верхний левый угол массива(первая строка и первый столбец). Я не могу придумать никакого решения для этого, любая помощь будет оценена по достоинству.
Подробное объяснение программы приведено ниже:
Write a program "Robot in the labyrinth" that creates a two dimensional array - a labyrinth with 20 rows and 20 columns and fills it with random numbers in the range from 1 to 9. At the beginning the robot is standing in the top-left corner of the labyrinth (element in the first row and the first column in an array). 
|	9	7|
| 3	4	5|
| 5	2	2|
After that the robot moves so that it will always go to the next element whose value is the largest, but the previous element is replaced by zero. 
4	3	9		4	3	9
6		7		6	0	
8	4	2		8	4	2
The program stops work, when the all elements values around the robot are zero.
2	0	6
0		0
7	0	5


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

#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

int main(){
	srand(time(0));
            	
           int a[20][20],i,j;
           
           for(i=0; i<=19; i++){
           	for(j=0; j<=19; j++){
           		a[i][j] = rand() % 9+ 1; 
			   }
		   }
		   for(i=0; i<=19; i++){
           	for(j=0; j<=19; j++){
           		 cout<<a[i][j]<<" "; 
			   }
			   cout<<endl;
		   }
            
           		 
           
           return 0;
}

3 Ответов

Рейтинг:
25

Rick York

Мне кажется, что вам нужно сохранить текущее положение робота. Это может быть в структуре или массиве. Я предполагаю, что вы будете использовать массив с первой позицией координаты x и второй позиции координаты Y. Чтобы установить положение робота в верхнем левом углу вы устанавливаете обе координаты равными нулю :

int position[2] = { 0, 0 };
Оглядываясь назад, я думаю, что я бы пошел на структурный подход. Вот одна из возможностей :
typedef struct
{
   int x;
   int y;
} Point2D;

Point2D robotPos = { 0, 0 };   // initialized to origin

robotPos.x = 1;
robotPos.y = 1;             // set to 1,1


Рейтинг:
1

Patrice T

Цитата:
Мне нужно поместить элемент(робота) в верхний левый угол массива(первая строка и первый столбец). Я не могу придумать никакого решения для этого, любая помощь будет оценена по достоинству.

Вы не "кладете элемент", вы просто устанавливаете 2 переменные, чтобы запомнить положение робота.
Цитата:
После этого робот перемещается так, что он всегда будет переходить к следующему элементу, значение которого является наибольшим, но предыдущий элемент заменяется нулем.

У вас есть условия для перемещения робота. Возьмите образец листа Excel, заполните небольшой квадрат значениями и играйте в робота, запишите последовательность действий, которую вы используете для перемещения робота, это алгоритм перемещения робота.

Поскольку обработка границ платы усложнит ваш код, вы можете заменить массив 20*20 массивом 22*22 и установить элементы на границе равными 0. Таким образом, движущийся код никогда не выйдет за пределы игрового поля даже без проверки границ.


Рейтинг:
0

OriginalGriff

Создайте переменные X и Y - оба целых числа - чтобы показать текущее положение роботов:

int robotX, robotY;
И установите их оба равными нулю (поскольку массивы C++ используют нулевые индексы). Когда робот движется влево, вычитайте один из robotX и добавьте один, когда он движется вправо. Сделайте то же самое для up и down с robotY.