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

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

Войти
Регистрация
Восстановить пароль
 
Aliosha
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 9
#1

Класс для лабиринта(из файла) - C++

22.02.2013, 07:56. Просмотров 296. Ответов 0
Метки нет (Все метки)

Входной файл содержит информацию о лабиринте в виде матрицы, в которой разными символами обозначены пустое пространство и стены(например, 0 м 1 ), а также информацию о начальной и конечной позициях(двумя другими символами).

1)Разработать класс для хранения, изменения и обработки информации о лабиринте.

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

Формат входного файла: размеры матрицы, описывающее лабиринт, матрица.

Кликните здесь для просмотра всего текста

C++ (Qt)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
 
using namespace std;
 
    int const mkY=5;
    int const mkX=5;
 
    int kY=mkY-1;
    int kX=mkX-1;
 
    int mat[mkY][mkX]={
        1,1,0,1,1,
        0,0,0,0,1,
        1,1,1,0,1,
        1,1,1,0,1,
        1,1,1,0,1
 
    };
 
    int posX = 0,
        posY = 0;
 
//Функции
void pLeft(void)//влево
{   
    if(mat[posY][posX-1]==0)
    {
        mat[posY][posX]=1;
        posX--;
    };
};
 
void pRight(void)//вправо
{
    if( (mat[posY][posX+1]==0) && (posX+1!=kX) ) 
    {
        mat[posY][posX]=1;
        posX++;
    };
};
 
void pDown(void)//вниз
{
    if(mat[posY+1][posX]==0)
    {
        mat[posY][posX]=1;
        posY++;     
    };
};
 
int main(int argc, char* argv[])
{
 
 
    //Выводит массив на экран
    for(int i = 0; i <= kY; i++)
        for(int j = 0; j<= kX; j++){
            cout << mat[i][j] << ' ';
            if (j == kX) cout << endl;
        }
 
    cout << "- - - - - - -" << endl;
 
    int ST[2] = {0,1}, // 1.2 _start
        EN[2] = {4,2}; // 5.3 _end
 
//  int posX = 0,
//      posY = 0;
 
    posY = ST[0]; //позиция старта Строки  X
    posX = ST[1]; //позиция старта Столбца Y
 
    cout << "coordinats START: "<<posY << " " << posX << endl;
    cout << "coordinats END: "<< EN[0] << " " << EN[1] << endl;
 
    int kontr(0);
 
    posX=0;
    posY=0;
/* !!! нахождение точки выхода по углам, в ином случаи "Выхода нет!"  */
    //ищем точку входа сверху
    for (int j=0;j >= kX ;j++ )
        if (mat[0][j]==0){ 
    cout << 'z'<< posX <<endl;
            posX=j;
    cout << 'j'<< j <<endl;
        };
 
    for(int i=0; i <= kX;i++)
        if (mat[0][i]==0)posX=i;
 
//тестовые переменные
    int tm[10][10];
    int tt = 0;
 
    while (kontr!=1)
    {
        //для проверки while, т.к условие в нём не работает!
          //if ((posY >= EN[0])&&(posX >= EN[1] ))kontr=1;
 
        if ((posY >= kY)&&(posX >= 1 ))kontr=1;
    
        cout << "Y=" << posY << " X=" << posX << endl;
        if(mat[posY][posX]==0)//текущая позиция ? = 0
        {
            //если после движения везде 1 
            if( ((mat[posY+1][posX]==1)&&(mat[posY-1][posX]==1)&&(mat[posY][posX+1]==1)&&(mat[posY][posX-1]==1))&&(tt>=1) )
            {
                mat[posY][posX]=1;
                posY = tm[0][0];
                posX = tm[0][1];
                mat[posY][posX]=0;
                cout<< "C>> " << "Y=" << posY << "X=" << posX <<endl;
                //tt --;
                tt = 0;
            };
            pDown();//вниз  
 
            //если после движения Д 0 
            if((posY<=kY)&&
                (
                ((mat[posY  ][posX+1]==0)&&(mat[posY  ][posX-1]==0))||//справа слева 
                ((mat[posY+1][posX  ]==0)&&(mat[posY  ][posX+1]==0))||//сверху справа
                ((mat[posY+1][posX  ]==0)&&(mat[posY-1][posX  ]==0))||//сверху снизу
                ((mat[posY+1][posX  ]==0)&&(mat[posY  ][posX-1]==0))||//сверху слева
                ((mat[posY  ][posX+1]==0)&&(mat[posY-1][posX  ]==0))||//справа снизу
                ((mat[posY  ][posX-1]==0)&&(mat[posY-1][posX  ]==0))  //слева снизу
                )       
              )
            {
                //сохранить позиции x y
                
                tm[0][0] = posY;
                tm[0][1] = posX;
                cout << "S<<" << " Y=" << posY << "X=" << posX <<endl;
                tt = 1;
                //tt ++;
            };
 
            pLeft();//влево
            pRight();//вправо
 
        };
    };
 
    cout << endl << "test END";
 
    getchar();
    return 1;
}


Добавлено через 3 часа 13 минут
с поиском поти поти завершено
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 07:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс для лабиринта(из файла) (C++):

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

Чтение лабиринта из файла - C++
ребята , не могу задать чтение элементов лабиринта с файла.. помогите пожалуйста.. const int - никак не задается #include...

Алгоритм Дейкстры для лабиринта - C++
Лабиринт задается матрицей, где 0 стены, 1 проходы, s - начальная вершина, f - конечная. Лабиринт считывается из файла. Не могу сообразить,...

Нужно создать класс для чтения из файла - C++
Нужно создать класс для чтения из файла.

Как написать волновой алгоритм для трехмерного лабиринта? - C++
Трехмерный лабиринт выглядит следующим образом На примере 3*3*3 Числа 0,1,2... секторы лабиринта -1 проходимые участки -2 стенки ...

В данный класс добавить код для построчного чтения из файла - C++
помогите пожалуйста в данный класс надо добавить код для построчного чтения из файла Bank_Hall.class...

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

Реализовать класс ModelWindow, добавив поле для курсора, используя для представления поля класс Cursor - C++
Реализовать класс ModelWindow, добавив поле для курсора. Используйте для представления поля класс Cursor. (это под типом класс в классе).

Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и почтового ад - C++
Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и...

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

Реализовать класс Goods используя для представления цены класс Money - C++
Реализовать класс Goods (пункт 1 ), используя для представления цены класс Money с пункта 2 Реализовать метод уценки товара, уменьшая цену...


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

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

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