Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/163: Рейтинг темы: голосов - 163, средняя оценка - 4.51
6 / 6 / 0
Регистрация: 19.08.2016
Сообщений: 9
1

Как пройти лабиринт?

30.09.2017, 13:50. Показов 29775. Ответов 15

Author24 — интернет-сервис помощи студентам
Дали задание пройти лабиринт. Помогите понять каким образом я должен это сделать. Можете объяснить как устроен "робот", стены. Как проверять есть ли стена снизу или нет. Я понял только как ходить (robot.MoveTo(Direction.<Вверх, вниз и т.п.>).
Вложения
Тип файла: zip Mazes.exercise.zip (29.3 Кб, 104 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2017, 13:50
Ответы с готовыми решениями:

Функция, использующая рекурсию, чтобы пройти лабиринт
Помогите пожалуйста найти и исправить ошибку. Есть задача :&quot; Напишите функцию,которая получает...

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

Лабиринт задан двумерным массивом. Из левого верхнего угла лабиринта пройти в правый нижний
Лабиринт задан двумерным массивом. Из левого верхнего угла лабиринта пройти в правый нижний. Массив...

Игра лабиринт. ИИ в лабиринте. Как задать лабиринт
У меня есть следующее задание: Дано: - робот - лабиринт Задание: - Нужно реализовать...

15
75 / 75 / 96
Регистрация: 29.09.2012
Сообщений: 232
30.09.2017, 17:07 2
Пустой лабиринт
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace Mazes
{
    public static class EmptyMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {
            
           for(int i = 0; i < width-3; i++) 
            { robot.MoveTo(Direction.Right);}
            for (int i = 0; i < height - 3; i++)
            { robot.MoveTo(Direction.Down); }
        }
    }
}
Лабиринт змейка
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace Mazes
{
    public static class SnakeMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {         
            int dlin = width - 3;
            int vniz = 2;
 
            while (robot.Finished == false)
            {
                if (robot.Finished == false) {
                    for (int i = 0; i < dlin; i++)
                    { robot.MoveTo(Direction.Right); }
                    for (int i = 0; i < vniz; i++)
                    { robot.MoveTo(Direction.Down); }
                    for (int i = 0; i < dlin; i++)
                    { robot.MoveTo(Direction.Left);}
                    if (robot.Finished == false) {
                        for (int i = 0; i < vniz; i++)
                        { robot.MoveTo(Direction.Down); } }
                } }     
        }
    }
}
Лабиринт пирамида
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
namespace Mazes
{
    public static class PyramidMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {
            Rigth(robot,width,3);           
            UP(robot);
            Left(robot, width, 5);                    
            UP(robot);
            Rigth(robot, width, 7);
            UP(robot);
            Left(robot, width, 9);             
            UP(robot);
            Rigth(robot, width, 11);
            UP(robot);
            Left(robot, width, 13);                 
            UP(robot);
            Rigth(robot, width, 15);
            UP(robot);
            Left(robot, width, 17);            
        }
        public static void UP(Robot robot)
        {
            if (robot.Finished == false)
            {
                for (int i = 0; i < 2; i++)
                {
                    robot.MoveTo(Direction.Up);
                }
            }
        }
        public static void Rigth(Robot robot, int width,int a)
        {
            if (robot.Finished == false)
            {
                for (int i = 0; i < width - a; i++)
                {
                    robot.MoveTo(Direction.Right);
                }
            }
        }
        public static void Left(Robot robot, int width, int a)
        {
            if (robot.Finished == false)
            {
                for (int i = 0; i < width - a; i++)
                {
                    robot.MoveTo(Direction.Left);
                }
            }
        }
    }
}
5
1 / 1 / 0
Регистрация: 26.09.2017
Сообщений: 5
30.09.2017, 18:38 3
Цитата Сообщение от Andrey_sava Посмотреть сообщение
for(int i = 0; i < width-3; i++)
Цитата Сообщение от Andrey_sava Посмотреть сообщение
for (int i = 0; i < height - 3; i++)
Andrey_sava, Почему i< height - 3 ? Почему именно 3 ?

Добавлено через 34 минуты
Все, понял почему, забил вместо width height и стало ясно, что это крайние клетки и клетка нахождения робота вычитаются.
Спасибо за решение.
1
3 / 3 / 0
Регистрация: 28.10.2017
Сообщений: 17
16.01.2018, 14:08 4
Я вот как змейку с пирамидой решил:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
namespace Mazes
{
    public static class SnakeMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {
            while(true)
                {
                 for(int i=0;i<width-3;i++)
                    robot.MoveTo(Direction.Right);
                   robot.MoveTo(Direction.Down);
                   robot.MoveTo(Direction.Down);
                 for(int i=0;i<width-3;i++)
                    robot.MoveTo(Direction.Left);
                 if(robot.Finished)break;
                   robot.MoveTo(Direction.Down);
                   robot.MoveTo(Direction.Down);
                }
        }
    }
}
 
namespace Mazes
{
    public static class PyramidMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {
            while(true)
                {
                 for(int i=0;i<width-3;i++)
                    robot.MoveTo(Direction.Right);
                   robot.MoveTo(Direction.Up);
                   robot.MoveTo(Direction.Up);
                width -= 2;
                 for(int i=0;i<width-3;i++)
                    robot.MoveTo(Direction.Left);
                 if(robot.Finished)break;
                   robot.MoveTo(Direction.Up);
                   robot.MoveTo(Direction.Up);
                width -= 2;
                }
        }
    }
}
а вот диагональ не могу , подскажите .
2
6 / 6 / 0
Регистрация: 19.08.2016
Сообщений: 9
16.01.2018, 14:21  [ТС] 5
kostyan196, отрыл в архивах))


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
 
namespace Mazes
{
    public static class DiagonalMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {
            int aspectRatio;
            while (robot.Finished == false)
            {
                if (width > height)
                {
                    aspectRatio = (width - 2) / (height - 2);
                    Move(robot, aspectRatio, Direction.Right, Direction.Down);
                }
                else
                {
                    aspectRatio = (height - 2) / (width - 2);
                    Move(robot, aspectRatio, Direction.Down, Direction.Right);
                }
            }
        }
        public static void Move(Robot robot, int aspectRatio, Direction direction, Direction directionTwo)
        {
            if (!robot.Finished) for (var i = 0; i < aspectRatio; i++) robot.MoveTo(direction);
            if (!robot.Finished) robot.MoveTo(directionTwo);
        }
    }
}
6
3 / 3 / 0
Регистрация: 28.10.2017
Сообщений: 17
16.01.2018, 14:33 6
Спасибо за быстрый ответ.
0
0 / 0 / 0
Регистрация: 26.05.2018
Сообщений: 39
17.07.2018, 14:30 7
Подскажите, пожалуйста, логику этого решения. За что отвечает aspectRatio? И откуда берется DirectionTwo?
0
3 / 3 / 0
Регистрация: 28.10.2017
Сообщений: 17
17.07.2018, 15:42 8
Насколько я помню, решение завязано на размер поля.
0
0 / 0 / 0
Регистрация: 26.05.2018
Сообщений: 39
17.07.2018, 16:10 9
Так оно и есть. Только что имено нужно с этим размером делать?! Вот в чем беда!
0
0 / 0 / 0
Регистрация: 02.10.2018
Сообщений: 1
02.10.2018, 19:28 10
temych812, а все таки почему на 3, объясните кто-нибудь, пожалуйста temych812,
0
Администратор
Эксперт .NET
17024 / 13376 / 5218
Регистрация: 17.03.2014
Сообщений: 27,356
Записей в блоге: 1
02.10.2018, 20:13 11
Цитата Сообщение от thepr1est Посмотреть сообщение
temych812, а все таки почему на 3, объясните кто-нибудь, пожалуйста
Чукча писатель, а не читатель?
Цитата Сообщение от temych812 Посмотреть сообщение
Все, понял почему, забил вместо width height и стало ясно, что это крайние клетки и клетка нахождения робота вычитаются.
1
1 / 1 / 1
Регистрация: 08.04.2019
Сообщений: 3
09.04.2019, 22:46 12
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace Mazes
{
    public static class EmptyMazeTask
    {
        public static void MoveOut(Robot robot, int width, int height)
        {
            
           for(int i = 0; i < width-3; i++) 
            { robot.MoveTo(Direction.Right);}
            for (int i = 0; i < height - 3; i++)
            { robot.MoveTo(Direction.Down); }
        }
    }
}
К сожалению, в моём случае это решение неверно - преподаватель требует, чтоб "не более одного цикла в методе".
0
Администратор
Эксперт .NET
17024 / 13376 / 5218
Регистрация: 17.03.2014
Сообщений: 27,356
Записей в блоге: 1
09.04.2019, 23:15 13
zhuromvlad, сделай одним значит. Посчитай сколько шагов нужно сделать вправо и сколько вниз. Цикл делаем пока кол-во оставшихся шагов в любом направлении больше нуля.
1
1 / 1 / 1
Регистрация: 08.04.2019
Сообщений: 3
11.04.2019, 23:15 14
Так я не и знаю как сделать такой цикл! Как в ОДНОМ цикле учесть ДВА РАЗНЫХ направления?
0
Администратор
Эксперт .NET
17024 / 13376 / 5218
Регистрация: 17.03.2014
Сообщений: 27,356
Записей в блоге: 1
12.04.2019, 00:07 15
zhuromvlad, элементарно
Код
Пока ШагиВправо>0 Или ШагиВниз>0
    Если ШагиВправо>0 То
        ДелаемШагВправо
        ШагиВправо = ШагиВправо - 1
    КонецЕсли
    Если ШагиВниз>0 То
        ДелаемШагВниз
        ШагиВниз = ШагиВниз - 1
    КонецЕсли
КонецЦикла
1
1 / 1 / 1
Регистрация: 08.04.2019
Сообщений: 3
12.04.2019, 00:25 16
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Вопросы сняты! Решение найдено!

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace Mazes
{
    public static class EmptyMazeTask
    {
 
        public static void RobotMove(Robot robot, int width, int height, int i)
        {
            if (i < width - 3) robot.MoveTo(Direction.Right);
            if (i < height - 3) robot.MoveTo(Direction.Down);
        }
 
        public static void MoveOut(Robot robot, int width, int height)
        {
            for (int i = 0; robot.Finished != true; i++)
            {
                RobotMove(robot,width,height,i);
            }
        }
    }
}
1
12.04.2019, 00:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2019, 00:25
Помогаю со студенческими работами здесь

Как пройти тест
Подскажите пожалуйста как пройти тест, в углу наверное (я просто предполагаю) ячейка где выводится...

Как пройти антиплагиат?
Здравствуйте, ребята. Проблема у меня олна возникла. Написал диплом, а через антиплагиат не...

Как задать лабиринт?
Необходимо решить проблему нахождения выхода из лабиринта используя DFS, а потом используя BFS....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru