Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.59
JayDiLee
0 / 0 / 1
Регистрация: 02.06.2011
Сообщений: 1
#1

Класс реалз стек, для отыскания выхода из лабиринта - C++

05.06.2011, 23:41. Просмотров 2549. Ответов 1
Метки нет (Все метки)

Добрый день.
написал стек и поиск по лабиринту, осталось их привязать друг к другу и изменить
путь который пишет в массив, в стек
. Помогите пожалуйста, в с/с++ новичок не все знаю, буду очень благодарен.
Вот задача:
http://www.cyberforum.ru/cpp-beginners/thread870897.html
/////Описать класс, реализующий стек. Написать программу, использующую этот класс для отыскания прохода по лабиринту.
Лабиринт представляется в виде матрицы, состоящей из квадратов. Каждый квадрат либо открыт, либо закрыт. Вход в закрытый квадрат запрещен. Если квадрат открыт, то вход в него возможен со стороны, но не с угла. Каждый квадрат определяется его координатами в матрице. После отыскания прохода программа печатает найденный путь в виде координат квадратов.
////
Вот код:
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
struct data{int x,y;};//////это стек
class CMyStack
{
 private:
      
  struct Node
        {
                data dannie;
                Node *p;
        };
 
        Node *top;
public:
        CMyStack();
        ~CMyStack(){
   while (top)
   {
     Node *pv = top;
        top = top->p;
        delete pv;
    }
 
  }
 
  bool CMyStack::isEmpty()
{
        return top ? false : true;
}
       
  void Push(data d){
        Node *pv = new Node;
        pv->dannie = d;
         pv->p = top;
        top = pv;
}
    
  data Pop(){
        data temp;
  temp.x = -1;
  if (isEmpty())
  {
                return temp;
        }
        temp = top->dannie;
  Node *pv = top;
        top = top->p;
        delete pv;
        return temp;
 
        }
       
  void Print();
        
 
  };
 
CMyStack::CMyStack():top(NULL)
{
        
}

///обход массива
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
/// 0-пусто
 /// 1-стенка 2-вход 3-выход
    //       1111111 
  //         1000021
//          1111101
// //       1200001
 //       1111111
 
 
 
 
 
 int a1[35]={1,1,1,1,1,1,1,1,0,0,0,0,0,2,1,1,1,1,1,0,1,2,0,0,0,0,0,1,1,1,1,1,1,1,1};
 data put[100];
 int lab[nstr][nstb];
 int i,j,kol;
 
 kol=0;
 for (i=0;i<nstr;i++){
 for (j=0;j<nstb;j++) 
 {
  lab[i][j]=a1[kol];
  kol++;
 }}//забили наш лабиринт в двумерный массивж
  //vivod
 
cout<<"+++++"<<endl;
/* for (i=0;i<nstr;i++){
 for (j=0;j<nstb;j++) 
 {
  cout<<lab[i][j];
 }
 cout<<" "<<endl;
 }*/
 
 
int tyss; 
tyss=3;///так же как в графическом режиме x- столбцы у-строки
int txss=1;    //кординаты старта, нумерация с нуля!!!
int txxx=0;      //содержимое текущей ячейки
kol=0;
while(txxx!=3){
//движемся по стеночке
 if ((lab[txss-1][tyss])==0){put[kol].x=txss;put[kol].y=tyss;kol++;continue;}//если сверху пусто то идем наверх
    if ((lab[txss][tyss+1])==0){put[kol].x=txss;put[kol].y=tyss;kol++;continue;}//если справа пусто то идем направо
    if ((lab[txss][tyss-1])==0){put[kol].x=txss;put[kol].y=tyss;kol++;continue;}//если слева 
 if ((lab[txss+1][tyss])==0){put[kol].x=txss;put[kol].y=tyss;kol++;continue;}//если внизу пусто 
 }
 
for(i=0;i<kol;i++){cout<<put[i].x<<" "<<put[i].y<<endl;};
 
system("pause");
 
 return 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2011, 23:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Класс реалз стек, для отыскания выхода из лабиринта (C++):

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

Задача нахождения выхода из лабиринта
Дан файл с нарисованным лабиринтом в нем, состоящий из 0 и 1. 0 - проход, 1 -...

Исправить поиск выхода из лабиринта
Есть программа поиска выхода из лабиринта: #include &lt;stdio.h&gt; #include...

Программа «поиск выхода из лабиринта»
Открывать файл «карту», имя файла передавать как параметр командной строки....

Можно ли на С++ как-то свернуть стек для выхода из рекурсии, а не последовательно выходить из нее?
Вот такой пример кода: QuickSort::QuickSort(void) { deeps = 0;...

1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.06.2011, 08:12 #2
Ну дык скопипасть то что сверху в то что снизу и фсё!

Кстати, твой лабиринт не имеет решения, т.к. в нём два входи и ни одного выхода.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2011, 08:12
Привет! Вот еще темы с решениями:

Реализовать программу, осуществляющую поиск выхода из лабиринта методом поиска с возвратом.
Реализовать программу, осуществляющую поиск выхода из лабиринта методом поиска...

Поиск маршрутов выхода из лабиринта и запись карты с найденным маршрутом в файл
Нужно провести поиск маршрутов выхода из лабиринта и запись карты с найденным...

Реализовать программу, осуществляющую поиск выхода из лабиринта методом поиска с возвратом.
Реализовать программу, осуществляющую поиск выхода из лабиринта методом поиска...

Напишите класс «Стек» для целочисленных данных на основе односвязного списка
Напишите класс «Стек» для целочисленных данных на основе односвязного списка....


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

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

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