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

Обход матрицы по 0 с заданного элемента - C++

Восстановить пароль Регистрация
 
 
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 11:18     Обход матрицы по 0 с заданного элемента #1
Дана квадратная матрица, состоящая из 0 и 1...делается обход начинаю с какого то элемента... пробегается по 0, например вправо, если встречается 1, то мы меняем маршрут, вниз или вверх, если опять встречается 1, то опять меняем маршрут.....требуется написать программу, которая напишет номер элемента, который сможет пройтись таким образом по всем нулям....реализовать поиск с помощью рекурсивной функции...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2013, 11:18     Обход матрицы по 0 с заданного элемента
Посмотрите здесь:

Обход матрицы по спирали C++
C++ Функция нахождения минимального элемента заданного столбца матрицы
Обход матрицы C++
C++ Требуется совершить обход квадратной матрицы по спирали
Найти номер первого максимального элемента среди отрицательных элементов, расположенных до первого элемента, большего заданного числа Т C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,047
Записей в блоге: 18
Завершенные тесты: 1
23.04.2013, 17:33     Обход матрицы по 0 с заданного элемента #21
Цитата Сообщение от Lonter Посмотреть сообщение
getpath(path+" right",j+1,i,"right",cnt+1);
Необходимо правильно передать char в первый и четвертый параметр функции getpath.

Добавлено через 55 секунд
Цитата Сообщение от Lonter Посмотреть сообщение
и по нулям 2 раза проходиться нельзя, вот
это очень даже существенно. тут надо думать

Добавлено через 13 минут
Вот вам код, который компилится. Но он падает при запуске. В VS2010 есть отладчик. Прогоните его в отладчике, посмотрите что с ним не так.

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
static string path;
char* msPath = new char[100];
char* msLast = new char[100];
 
 
 
int M[3][3] = {{0,1,0}, {0,0,1}, {0,0,1}};
 
 
char* getpath(char *path, int j, int i, char *last, int cnt) {
     
     
   if (cnt>6) return path;    
    
    if (last!="left")      
    if (j+1==3) ;
       else if (M[j+1][i] == 1) ;
        else getpath(strcat(path,"right"),j+1,i,"right",cnt+1);
       
    if (last!="right")       
    if (j-1==-1) ;
       else if (M[j-1][i] == 1) ;
        else getpath(strcat(path,"left"),j-1,i,"left",cnt+1);
        
    if (last!="down")       
    if (i-1==-1) ;
       else if (M[j][i-1] == 1) ;
        else getpath(strcat(path,"up"),j,i-1,"up",cnt+1);  
        
    if (last!="up")       
    if (i+1==3) ;
       else if (M[j][i+1] == 1) ;
        else getpath(strcat(path,"down"),j,i+1,"down",cnt+1);          
         
         
         if (path!="Element:")
         cout << path  << endl; 
        
         return path;
       
       }
 
int main(int argc, char *argv[])
{  
 
//ji
 
for (int i=0;i<3;i++)
{
 cout << endl;
 for (int j=0; j<3; j++)
  cout << M[j][i] ;
}
  
   cout << endl;
  
for (int i=0;i<3;i++)
 for (int j=0; j<3; j++)
  {
        msPath="Element:"; 
        cout<<j<<" "<<i<<endl;
        getpath(msPath, j,i,"first",0);
      
    
        //  cout<< path << endl;
          path = ""; 
                  
          }
                 
  
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 17:41  [ТС]     Обход матрицы по 0 с заданного элемента #22
так а что все таки делать с тем, что нельзя по нулям ходить?

Добавлено через 2 минуты
else getpath(strcat(path,"right"),j+1,i,"right",cnt+1);

в этой строке ошибка)
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,047
Записей в блоге: 18
Завершенные тесты: 1
23.04.2013, 18:06     Обход матрицы по 0 с заданного элемента #23
Цитата Сообщение от Lonter Посмотреть сообщение
в этой строке ошибка)
Какая?

Добавлено через 2 минуты
Цитата Сообщение от Lonter Посмотреть сообщение
так а что все таки делать с тем, что нельзя по нулям ходить?
Отмечать пройденные. Делать массив M1, в котором заполнять единичками ячейки, по которым прошли. После возврата Path обнулять массив M1. Интересно, что получится..

Добавлено через 20 минут
Вот код, который компилится и запускается. Но после выполнения опять какая-то ошибка. Я char готовить не умею

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int M[3][3] = {{0,1,0}, {0,0,1}, {0,0,1}};
int getpath(char *path, int j, int i, char *last, int cnt) {
        
   if (cnt>6) return 0;    
    
    if (last!="left")      
    if (j+1==3) ;
       else if (M[j+1][i] == 1) ;
        else getpath(strcat(path,"right"),j+1,i,"right",cnt+1);
       
    if (last!="right")       
    if (j-1==-1) ;
       else if (M[j-1][i] == 1) ;
        else getpath(strcat(path,"left"),j-1,i,"left",cnt+1);
        
    if (last!="down")       
    if (i-1==-1) ;
       else if (M[j][i-1] == 1) ;
        else getpath(strcat(path,"up"),j,i-1,"up",cnt+1);  
        
    if (last!="up")       
    if (i+1==3) ;
       else if (M[j][i+1] == 1) ;
        else getpath(strcat(path,"down"),j,i+1,"down",cnt+1);          
         
         
         if (path!="Element:")
         cout << path  << endl; 
        
        return 0;
        
       
       }
 
int main(int argc, char *argv[])
{  
 
//ji
 
char msPath[100] = "";
char msLast[100] = "";
 
 
for (int i=0;i<3;i++)
{
 cout << endl;
 for (int j=0; j<3; j++)
  cout << M[j][i] ;
}
  
   cout << endl;
  
for (int i=0;i<3;i++)
 for (int j=0; j<3; j++)
  {
  //      msPath="Element:"; 
        strcpy(msPath,"Element:");
        cout<<j<<" "<<i<<endl;
        getpath(msPath, j,i,"first",0);
      
    
        //  cout<< path << endl;
         strcpy(msPath,""); 
                  
          }
                 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 18:41  [ТС]     Обход матрицы по 0 с заданного элемента #24
Stack around the variable 'msPath' was corrupted


вот такая ошибка(

но зато выводит что-то(((

Добавлено через 15 секунд
много сильно
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,047
Записей в блоге: 18
Завершенные тесты: 1
23.04.2013, 20:15     Обход матрицы по 0 с заданного элемента #25
Цитата Сообщение от Lonter Посмотреть сообщение
Stack around the variable 'msPath' was corrupted
В ходе рекурсии вылазит за пределы массива. Надо массив побольше объявить.

Цитата Сообщение от Lonter Посмотреть сообщение
много сильно
сейчас выводит все шаги. Для вывода надо условие ставить. Типо когда прошли все клетки, тогда выводить путь.
Плюс проверку на пройденные клетки.

Короче дальше сами разбирайтесь. Удачи.
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 20:17  [ТС]     Обход матрицы по 0 с заданного элемента #26
Ой ну я постараюсь))) эм, а динамический не стоит делать??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 20:24     Обход матрицы по 0 с заданного элемента
Еще ссылки по теме:

Обход матрицы C++
Выполнить обход матрицы по спирали C++
C++ Вывести на экран все элементы заданного столбца матрицы большие заданного числа

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

Или воспользуйтесь поиском по форуму:
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,047
Записей в блоге: 18
Завершенные тесты: 1
23.04.2013, 20:24     Обход матрицы по 0 с заданного элемента #27
Цитата Сообщение от Lonter Посмотреть сообщение
эм, а динамический не стоит делать??
Было бы гуд конечно. Если сможете, то отлично
Yandex
Объявления
23.04.2013, 20:24     Обход матрицы по 0 с заданного элемента
Ответ Создать тему
Опции темы

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