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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
#1

Как представить в c++ - C++

26.09.2009, 17:48. Просмотров 444. Ответов 7
Метки нет (Все метки)

дана к примеру матрица:
Код
a  b  c  d  e  f
1, 0, 0, 1, 0, 1, a
0, 1, 1, 0, 0, 1, b
0, 1, 1, 0, 0, 0, c
1, 0, 0, 1, 0, 1, d
0, 0, 0, 0, 1, 0, e
1, 1, 0, 1, 0, 1  f

Необходимо найти начальное покрытие ну то есть оно ищется так: построчно просматривается матрица и где есть единица составляется пара из строки и столбца

a,adf - 1-ая строка и 1-ый и 4-ый и 6-ый столбцы

Вот оно найдено: C0={(a,adf),(b,bcf),(c,bc),(d,adf),(e,e),(f,abdf)}

Так вот вопрос как бы мне это оформит в c++ , какой тип данных ,ну то есть я могу сделать массив arr[5][5] и туда это все помещать,но там будут оставаться не заполненные области т.к. эл-ов не равное кол-во.

Мне просто потом нужно работать с этими группами искать их пресечение, объединение и т.д
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
26.09.2009, 18:47     Как представить в c++ #2
C++
1
typedef std::vector<std::pair<int, std::vector<int> > > YOU_TYPE
попробуй так, похоже на правду, но не проверял
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
26.09.2009, 19:43  [ТС]     Как представить в c++ #3
TanT, замудрено однако ну вектор я еще встречал а че такое pair

Добавлено через 48 минут
эй люди неужели нету еще вариантов
TanT
эволюционирую потихоньку
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
26.09.2009, 20:30     Как представить в c++ #4
C++
1
2
3
4
struct{
int numb;                          
int one[ширина матрицы];
}YOU_STRUCT;
будешь заполнять массив не до конца, можешь изначально проинициализировать его любой отдичной от единицы цифрой и как накнёшься на неё в процессе обработки остановишь перебор.
Это алтернативный вариант без динамического выделения памяти при нахождении единицы
P.S. pair - Пара —это просто шаблонная структура, которая содержит два по-
ля, возможно, различных типов. Поля имеют названия first и second.
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
26.09.2009, 20:56  [ТС]     Как представить в c++ #5
вот сделал вот так заношу наши отображения в массив c построчно образуя пары {(0,035);(1,125) } и т.д. то только у меня в некоторых местах -1 которым я про инициализировал присутствует.
вопрос:Как в общем удалить из двумерного массива int c[6][7]; из столбцов лишние единицы
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
#include <iostream>
#include <set>
#include <algorithm>
#include <vector> 
using namespace std;
 
int main()
{
    
//начальная матрица
     int m[6][6]={0, 1, 1, 0, 1, 0,
                  1, 0, 0, 1, 1, 0,
                  1, 0, 0, 1, 1, 1,
                  0, 1, 1, 0, 1, 0,
                         1, 1, 1, 1, 0, 1,
                         0, 0, 1, 0, 1, 0};
 
     int c[6][7]; //тут будет наше отображение
     int i,j,x,y,flag=0;
      
//инициализируем все '-1'-ми
  for(i=0;i<6;i++)
      for(j=0;j<7;j++)
          c[i][j]=-1;
//инвертируем матрицу
  for(i=0;i<6;i++)
      for(j=0;j<6;j++)
       if(m[i][j]==1) m[i][j]=0;
       else if(m[i][j]==0) m[i][j]=1;
 
//создаем начальное покрытие C
   for(i=0;i<6;i++)
      for(j=0;j<6;j++)
      {
                 if(m[i][j]==1)
                   {
            if(flag==0)
            {
                c[i][j]=i;
                c[i][j+1]=j;
                flag++;
            }
                                  else c[i][j+1]=j;
           if(j==5) flag=0;
                      }
       if(j==5)flag=0;
      }
 
 
      //вывод
 for(i=0;i<6;i++)
      for(j=0;j<7;j++)
          cout<<c[i][j]<<endl;
return 0;
}
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
26.09.2009, 21:17     Как представить в c++ #6
вот
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
#define SIDE 6
    
using namespace std;
 
int main(){
    int m[SIDE][SIDE];
    int i,j;
    
    srand(time(NULL));
    
    for ( i = 0; i < SIDE; i++ )
        for ( j = 0; j < SIDE; j++ )
            m[i][j] = rand() % 2;
    
    cout << "Array:" << endl;
    cout << "  ";
    for ( i = 0; i < SIDE; i++ )
        cout << ((char)(i + 'a')) << ' ';
    cout << endl;
    for ( i = 0; i < SIDE; i++ ){
        cout << ((char)(i + 'a')) << ' ';
        for ( j = 0; j < SIDE; j++ )
            cout << m[i][j] << ' ';
        cout << endl;
    }
    
    cout << "Non zero cells:" << endl;
    for ( i = 0; i < SIDE; i++ )
        for ( j = 0; j < SIDE; j++ )
            if ( m[i][j] )
                cout << '[' << ((char)(i + 'a')) << "][" << ((char)(j + 'a')) << ']' << endl;
    
    return 0;
}
а, не так чуть-чуть. вывод щас подправлю...
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
26.09.2009, 21:35  [ТС]     Как представить в c++ #7
easybudda, спасибо оригинальненько, но мне бы это куда то в массив загнать )) или куда то еще а то ведь надо еще пресечение объединение этих пар мутить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2009, 21:49     Как представить в c++
Еще ссылки по теме:

Игра на С++. Как лучше представить дорогу? C++
C++ Как представить int в двоичном коде
C++ Как представить многомерный массив в одномерный?
C++ Представить Ресурс как Handle
Как представить byte в виде строки? C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
26.09.2009, 21:49     Как представить в c++ #8
Sergeymd, Ну Вы определитесь как-нибудь, а пока немного мудрёно, но примерно, как в задании:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
#define SIDE 6
    
using namespace std;
 
int main(){
    int m[SIDE][SIDE];
    int i,j;
    bool flag, rows_befor;
        
    srand(time(NULL));
    
    for ( i = 0; i < SIDE; i++ )
        for ( j = 0; j < SIDE; j++ )
            m[i][j] = rand() % 2;
    
    cout << "Array:" << endl;
    cout << "  ";
    for ( i = 0; i < SIDE; i++ )
        cout << ((char)(i + 'a')) << ' ';
    cout << endl;
    for ( i = 0; i < SIDE; i++ ){
        cout << ((char)(i + 'a')) << ' ';
        for ( j = 0; j < SIDE; j++ )
            cout << m[i][j] << ' ';
        cout << endl;
    }
    
    cout << "Non zero cells:" << endl;
    rows_befor = false;
    for ( i = 0; i < SIDE; i++ ){
        flag = false;
        for ( j = 0; j < SIDE; j++ ){
            if ( m[i][j] ){
                if ( !flag ){
                    if ( rows_befor ){
                        cout << ',';
                    }
                    cout << '(' << ((char)(i + 'a')) << ',';
                    flag = true;
                }
                cout << ((char)(j + 'a'));
            }
        }
        if ( flag ){
            cout << ')';
            rows_befor = true;
        }
    }
    
    return 0;
}
Yandex
Объявления
26.09.2009, 21:49     Как представить в c++
Ответ Создать тему
Опции темы

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