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

Вывести кол-во маршрутов, ведущих узника к выходу и проходящих через M+N-1 комнату, или слово impossible, если таких маршрутов не существует - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Аналог функции strcpy http://www.cyberforum.ru/cpp-beginners/thread641341.html
myStrlen был дан как пример в книге, а свой myStrcpy неполучается написать:pardon: int myStrlen(char *str1); char myStrcpy(char *b, char *str2); int main(){ setlocale(LC_CTYPE,"Russian"); char buffer; cout << "Количество букв в слове \"Мой strlen\": "; cout << myStrlen("Мой strlen") << "\n"; cout << myStrcpy(buffer, "Мой strcpy");
C++ о связи классов и наследовании даты #ifndef base_hpp #define base_hpp #include "Data.hpp" #include <iostream> using namespace std; class base { http://www.cyberforum.ru/cpp-beginners/thread641321.html
Динамическая память. Функции. Массивы .Объекты C++
Всем привет. Возник следующий вопрос: 1.Когда в c++ из функции возвращается объект (экземпляр какого-то класса), то насколько мне известно, создается временный объект, для хранения результат и последующего его возврата. Так вот,является ли следующий код корректным? MyClass MyClass::func(){ MyClass temp; ... return temp; }
C++ Комплексные числа. Символическая форма записи
Сейчас делаю реализацию класса. Что-то мне подсказывает, что есть ошибки. Тут больше вопрос по математике, в коей я практически ничего не понимаю. Кто в теме, просмотрите перегрузку арифметических действий, все ли там верно? class Ccomplex { private: float x; float y; public: // Элементарное приравнивание и возврат значений void SetX(float value) {
C++ : error C2065: 'remainder' : undeclared identifier http://www.cyberforum.ru/cpp-beginners/thread641310.html
Доброй ночи, вот изучаю Microsoft Visual Studio 2008 и в примере выскакивает данная ошибка(: error C2065: 'remainder' : undeclared identifier) , я так понимаю что в коде не хватает библиотеки только какой не пойму вот собственно говоря код: #include <stdafx.h> #include <iostream> using namespace std; int main() { int n, remaider; cout<<"Enter a number and pres Enter:"; cin>>n; ...
C++ Массив: Все элементы массива, кратные трем, записать в одномерный массив. Дан двумерный массив размером n x n? заполненный целыми числами. Все его элементы кратные трем, записать в одномерный массив. подробнее

Показать сообщение отдельно
Юлия17071992
0 / 0 / 0
Регистрация: 29.05.2011
Сообщений: 55

Вывести кол-во маршрутов, ведущих узника к выходу и проходящих через M+N-1 комнату, или слово impossible, если таких маршрутов не существует - C++

23.08.2012, 10:31. Просмотров 1281. Ответов 15
Метки (Все метки)

Здравствуйте! Имеем функцию на C++.Помогите исправить ошибки, чтобы выводился правильный результат. Сначало условие, а ниже будет недоработанный код

Попытка к бегству
Узник пытается бежать из замка, который состоит из MN квадратных комнат, расположенных в виде прямоугольника M×N. Между любыми двумя соседними комнатами есть дверь , однако некоторые комнаты закрыты и попасть в них нельзя. В начале узник находится в угловой комнате и для спасения ему надо попасть в противоположную угловую комнату. Времени у него немного, всего он может побывать не более, чем в M+N-1 комнате, включая начальную и конечную комнату на своем пути, то есть с каждым переходом в соседнюю комнату расстояние до выхода из замка должно уменьшаться. От вас требуется найти количество различных маршрутов, ведущих к спасению.

Формат входных данных

Первая строчка входных данных содержит натуральные числа M и N, не превосходящих 1000. Далее идет план замка в виде M строчек из N символов в каждой. Один символ соответствует одной комнате: если символ равен 1, то в комнату можно попасть, если он равен 0, то комната закрыта. Первоначальное положение узника – левый нижний угол (первый символ последней строки), выход находится в правом верхнем углу (последний символ первой строки, оба этих символа равны 1).
Формат выходных данных
Программа должна напечатать количество маршрутов, ведущих узника к выходу и проходящих через M+N-1 комнату, или слово impossible, если таких маршрутов не существует.
Входные данные подобраны таким образом, что искомое число маршрутов не превосходит 2.000.000.000.

Пример

Входные данные
3 5
11111
10101
11111
Выходные данные
3
Входные данные
3 5
11101
10101
10111
Выходные данные
impossible

Вот собственно сам код

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
131
132
133
134
135
136
137
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
#pragma argsused
 
struct Node
{
   int x,y;
   Node *p;
};
 
Node* top=0;
 
Node* push(Node *top,const int xnew, const int ynew)
{
   Node* pv = new Node;
   pv->x=xnew;
   pv->y=ynew;
   pv->p=top;
   return pv;
}
 
Node* pop(Node*top,int&xcur,int & ycur)
{
   Node *pv=top->p;
   xcur=top->x;
   ycur=top->y;
   delete top;
   return pv;
}
 
int main()
{
   Randomize;
   int nstr,nstb,i,j,fstr,fstb,count,numturn;
   int flab(int x,int y,int **mass, const int nr,const int nc,int count,int numturn);
   cout<<"Enter size of massiv"<<endl;
   cin>>nstr>>nstb;
   
   cout<<"Enter first coordinate"<<endl;
   cin>>fstr>>fstb;
   
   int **M=new int *[nstr];
   
   for(i=0;i<nstr;i++)
      M[i]=new int[nstb];
 
   for(i=0;i<nstr;i++)
      for(j=0;j<nstb;j++)
      {
        if((rand()-rand())>0)
           M[i][j]=1;
        else
           M[i][j]=0;
     }
 
   for(i=0;i<nstr;i++)
   {
      for(j=0;j<nstb;j++)
         cout<<M[i][j]<<' ';
      cout<<endl;
   }
 
   count=0;
   numturn=0;
   M[fstr][fstb]=0;
   int pr=flab(fstr,fstb,M,nstr,nstb,count,numturn);
 
   cout<<endl<<endl;
 
   for(i=0;i<nstr;i++)
   {
      for(j=0;j<nstb;j++)
         cout<<M[i][j]<<' ';
      cout<<endl;
   }
 
   getch();
}
 
   int flab(int x,int y,int **mass, const int nr,const int nc,int count,int numturn)
   {
      int prom;
     
      if(mass[x][y]==0)
      {
         if(x==0||x==nr-1||y==0||y==nc-1)
         {
             cout<<"exit"<<endl;
             return(1);
         }
         else
        {
            mass[x][y]=2;
            count=0;
            numturn++;
            top=push(top,x,y);
         }
   }
   else
   {
      if(count==4)
      {
         if(numturn>0)
         {
            numturn--;
            top=pop(top,x,y);
           count=0;
         }
         else
         {
            cout<<"home"<<endl;
            return 0;
          }
      }
    }
 
   switch(count)
   {
      case 0: count++;
                 prom=flab(x,y-1,mass,nr,nc,count,numturn);
                 break;
 
      case 1: count++;
                 prom=flab(x,y+2,mass,nr,nc,count,numturn);
                 break;
 
     case 2: count++;
                prom=flab(x-1,y-1,mass,nr,nc,count,numturn);
                break;
 
     case 3: count++;
                prom=flab(x+2,y,mass,nr,nc,count,numturn);
                break;
   }
 }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru