Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Flexoid1
5 / 5 / 0
Регистрация: 08.07.2012
Сообщений: 20
#1

Выход из лабиринта - C++

16.08.2012, 17:47. Просмотров 500. Ответов 0
Метки нет (Все метки)

Делал задачу из Дейтела, выход из лабиринта, вроде сделал, посоветуйте как можно улучшить:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//  Copyright (c) 2012 Anton. All rights reserved.
//
 
#include <iostream>
using std::cout;
using std::endl;
 
enum status { UP, LEFT, RIGHT, DOWN };
 
void mazeTraverze (char map[][12], int ,int,int, int);
void showMap ( const char[][12], int );
void movePoint ( status , int &, int &);
void paint ( char[][12] , int , int);
int check ( char[][12], int , int);
 
int main(int argc, const char * argv[])
{
    const int size1 = 12;
    int currentPositionY = 0,currentPositionX = 2;
    int currentPositionTestY=0,currentPositionTestX=0;
    char map[ size1 ][ size1 ] = {
        { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
        { '#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#' },
        { '.', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#', },
        { '#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#', },
        { '#', '.', '.', '.', '.', '#', '#', '#', '.', '#', '.', '.', },
        { '#', '#', '#', '#', '.', '#', '.', '#', '.', '#', '.', '#', },
        { '#', '.', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#', },
        { '#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#', },
        { '#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '#', },
        { '#', '#', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#', },
        { '#', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#', },
        { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' }
    };
    paint(map, currentPositionY, currentPositionX);
    showMap(map, size1);
    mazeTraverze(map, currentPositionX, currentPositionY, currentPositionTestY, currentPositionTestX);
    return 0;
}
 
 
void mazeTraverze (char map[][12], int currentPositionX ,int currentPositionY,int currentPositionTestY , int currentPositionTestX)
{
    showMap(map, 12);
    currentPositionTestY = currentPositionY;
    currentPositionTestX = currentPositionX;
    movePoint(RIGHT, currentPositionTestY , currentPositionTestX); //Идём направо
    if ( check(map, currentPositionTestY, currentPositionTestX ) == 1 ) {
        currentPositionX  = currentPositionTestX;
        currentPositionY = currentPositionTestY;
        paint(map, currentPositionY, currentPositionX);
        mazeTraverze(map, currentPositionX, currentPositionY, currentPositionTestX, currentPositionTestY);
    } else
    {
        currentPositionTestY = currentPositionY;
        currentPositionTestX = currentPositionX;
        movePoint(UP, currentPositionTestY , currentPositionTestX); //Идём вниз
        if (check(map, currentPositionTestY, currentPositionTestX) == 1) {
            currentPositionX  = currentPositionTestX;
            currentPositionY = currentPositionTestY;
            paint(map, currentPositionY, currentPositionX);
            mazeTraverze(map, currentPositionX, currentPositionY, currentPositionTestX, currentPositionTestY);
        }  else
        {
            currentPositionTestY = currentPositionY;
            currentPositionTestX = currentPositionX;
            movePoint(LEFT, currentPositionTestY , currentPositionTestX); // налево
            if ( check(map, currentPositionTestY, currentPositionTestX) == 1 ) {
                currentPositionX  = currentPositionTestX;
                currentPositionY = currentPositionTestY;
                paint(map, currentPositionY, currentPositionX);
                mazeTraverze(map, currentPositionX, currentPositionY, currentPositionTestX, currentPositionTestY);
            } else {
                    currentPositionTestY = currentPositionY;
                    currentPositionTestX = currentPositionX;
                    movePoint(DOWN, currentPositionTestY , currentPositionTestX); // Вверх
                    if (check(map, currentPositionTestY, currentPositionTestX) == 1) {
                        currentPositionX  = currentPositionTestX;
                        currentPositionY = currentPositionTestY;
                        paint(map, currentPositionY, currentPositionX);
                        mazeTraverze(map, currentPositionX, currentPositionY, currentPositionTestX, currentPositionTestY);
                    }
            }
        }
    }
  }
        
 
void paint ( char map[][12], int y, int x)
{
    map [x][y] = 'X';
}
 
void showMap ( const char map[][12], int size )
{
    for (int i = 0; i < size ; i++) {
        for ( int j = 0; j < size; j++) {
            cout << map[i][j] << ' ';
        }
        cout << endl;
    }
}
 
int check ( char map[][12], int x, int y)
{
    if ( map[y][x] == '#' || map[y][x] =='X'  || x < 0 || y < 0 || x > 12 || y > 12) {
        return -1;
    } else
        return 1;
}
 
void movePoint ( status moved , int  &currentPositionX, int &currentPositionY )
{
    if ( moved == UP) {
        currentPositionX += 0;
        currentPositionY += 1;
    }
    if ( moved == LEFT) {
        currentPositionX -= 1;
        currentPositionY += 0;
    }
    if ( moved == RIGHT) {
        currentPositionX += 1;
        currentPositionY += 0;
    }
    if ( moved == DOWN) {
        currentPositionX += 0;
        currentPositionY -= 1;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2012, 17:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выход из лабиринта (C++):

Выход из лабиринта - C++
Всем привет, возник вопрос по поводу лабиринта. Посмотрев форум не нашел такого же задания. Суть - написать программу, с помощью которой...

Найти выход из лабиринта - C++
Пожалуйста помогите решить. Перевод. Вопрос задачи: наити выход роботу из лабиринта. Робот проходит только через (.), а это (#)...

Выход из лабиринта. В чем ошибка? - C++
Не могу понять, почему моя программа иногда выдает ошибку, а иногда работает хорошо. Помогите пожалуйста. #include&lt;iostream&gt; #include...

Прохождение лабиринта - C++
Привет всем , вот такая задача ... Найдите маршрут в квадрате, который начинался бы и заканчивался в ячейке 1. При этом посетить все...

Обход лабиринта - C++
Добрый вечер. Стоит задача обойти лабиринт, заданный матрицей (вводятся размерности и начальное положение), т. е. посетить каждую клетку,...

Проход лабиринта в C++ - C++
Ребята, помогите...вобщем, необходимо пройти по лабиринту и найти самый короткий маршрут...лабиринт я создал, а как пройти по нему ума не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2012, 17:47
Привет! Вот еще темы с ответами:

Прохождение лабиринта - C++
Имеется лабиринт. Нужно составить алгоритм, по которому программа найдет выход из лабиринта. мой начальный код. работает нормально,...

Прохождение лабиринта - C++
Ниже програма ищет маршрут в квадрате, который начинаеться и заканчиваеться в ячейке 1. Посещает все ячейки по одному разу, не попадая в...

Прохождение лабиринта - C++
Нужно пройти от 1 до 16 самым коротким путем. И вывести на экран количество шагов.

Генерация лабиринта - C++
Разработать приложение, генерирующее лабиринт размером m x n клеток. Дополнительные условия: а) Вход и выход – произвольные клетки...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru