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

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

Восстановить пароль Регистрация
 
Aliosha
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 9
22.02.2013, 07:56     Класс для лабиринта(из файла) #1
Входной файл содержит информацию о лабиринте в виде матрицы, в которой разными символами обозначены пустое пространство и стены(например, 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 минут
с поиском поти поти завершено
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 07:56     Класс для лабиринта(из файла)
Посмотрите здесь:

Класс и чтение из файла C++
C++ Класс реалз стек, для отыскания выхода из лабиринта
C++ чтение из файла в класс C++
Алгоритм Дейкстры для лабиринта C++
C++ В данный класс добавить код для построчного чтения из файла
C++ Дан проходной лабиринт с одним входом и выходом. Найти кратчайший путь для прохождения этого лабиринта
C++ С++ класс и чтение из файла
C++ Генерация лабиринта
Прохождение лабиринта C++
C++ Чтение лабиринта из файла
C++ Из файла в класс С++
Нужно создать класс для чтения из файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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