1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
1

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

23.04.2013, 11:18. Показов 1819. Ответов 26
Метки нет (Все метки)

Дана квадратная матрица, состоящая из 0 и 1...делается обход начинаю с какого то элемента... пробегается по 0, например вправо, если встречается 1, то мы меняем маршрут, вниз или вверх, если опять встречается 1, то опять меняем маршрут.....требуется написать программу, которая напишет номер элемента, который сможет пройтись таким образом по всем нулям....реализовать поиск с помощью рекурсивной функции...
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2013, 11:18
Ответы с готовыми решениями:

Поиск элемента матрицы из заданного диапазона
Напечатать элемент матрицы L со значением из промежутка . Отладить программу на данном примере: ...

Функция нахождения минимального элемента заданного столбца матрицы
Написать библиотеку функций для работы с квадратной целочисленной матрицей а)Функция для...

Начиная с заданного элемента матрицы, вывести ее элементы заданным образом
Дана квадратная матрица A порядка M. Начиная с элемента A1,1, вы- вести ее элементы следующим...

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
Добавить в класс "Односвязный список" следующие функции: вставка элемента в заданную позицию,...

26
993 / 520 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
23.04.2013, 17:33 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 = ""; 
                  
          }
                 
  
}
1
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 17:41  [ТС] 22
так а что все таки делать с тем, что нельзя по нулям ходить?

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

в этой строке ошибка)
0
993 / 520 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
23.04.2013, 18:06 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;
}
0
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 18:41  [ТС] 24
Stack around the variable 'msPath' was corrupted


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

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

Добавлено через 15 секунд
много сильно
0
993 / 520 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
23.04.2013, 20:15 25
Цитата Сообщение от Lonter Посмотреть сообщение
Stack around the variable 'msPath' was corrupted
В ходе рекурсии вылазит за пределы массива. Надо массив побольше объявить.

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

Короче дальше сами разбирайтесь. Удачи.
0
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.04.2013, 20:17  [ТС] 26
Ой ну я постараюсь))) эм, а динамический не стоит делать??
0
993 / 520 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
23.04.2013, 20:24 27
Цитата Сообщение от Lonter Посмотреть сообщение
эм, а динамический не стоит делать??
Было бы гуд конечно. Если сможете, то отлично
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2013, 20:24
Помогаю со студенческими работами здесь

Метод для вычисления минорной матрицы для заданного элемента
using System; namespace ConsoleApplication1 { class Matrix { /// &lt;summary&gt; ...

Обход элемента массива, исследование на соответствие
В общем, дело такое. Есть массив 5х5, в нем рандомно расставлены единицы. Нужно возле каждой...

Как осуществить прокрутку элемента управления в ListView до заданного элемента
Собственно вопрос в названии...Видел как это делают на VB если кто то может перевести с него могу...

В пользовательском классе List (список) реализовать вставку элемента после заданного элемента
Помогите пожалуйста, мне надо сделать вставку элемента после найденного, а у меня элемент...

Найти отношение минимального элемента матрицы A(n,m) и максимального элемента матрицы B(k,p)
Найти отношение минимального элемента матрицы A(n,m) и максимального элемента матрицы B(k,p) ...

Функция, которая возвращает список булевских значений четности каждого элемента заданного элемента целочисленного списка
Определите рекурсивные функции для решения задачи. НЕ РЕКОМЕНДУЕТСЯ использовать функции высших...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru