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

Графы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с EditBox в Visual Studio 2006 http://www.cyberforum.ru/cpp-beginners/thread153229.html
Я работаю с MFC інтерфейсов и ставил неактивними EditBox с помощью галочки в properties но теперь постала проблема в том штоб заставить ее исчезнуть в ходе работи програми. Какие есть функции для работи с EditBox и Button. Возможно книгу посоветуйте где есть етот вопрос. Спасибо. Извените за написание.
C++ Оператор присваивания Почему в этом случае вызывается оператор присваивания Fraction f4; f4 = f1+f2+f3; а в другом не вызывается: Fraction f4 = f1+f2+f3; Вот весь код: #include <stdafx.h> #include <conio.h> using namespace std; class Fraction { http://www.cyberforum.ru/cpp-beginners/thread153217.html
C++ Ввод неопределенного количества символов
В программе нужно реализовать возможность ввода символов, но не известно сколько раз надо это сделать. После идет обработка того, что мы ввели. ввод симолов заканчивается при нажатии например "Z". Как-то делал, но не помню как....
C++ Есть ли в классе строк или в алгоритмах разбиение строку на лексемы?
Собственно сабж, как говорится. Хотел переписать программу, которую делал с Си строками и массивом Си строк. Сделана она была не совсем правильно, ибо там логичнее было использовать двумерный массив, но все же. Вот переписал с использованием string. Только долго пришлось маяться. Искал какую-нибудь функцию, чтобы не переводить в Си строку для разбиения на слова. Есть ли такие стандартные функции...
C++ Как перерисовать всю клиентскую область? http://www.cyberforum.ru/cpp-beginners/thread153157.html
Всем доброго времени суток. Подскажите пожалуйста, как заставить свое окно перерисовываться полностью в момент его неактивности? Например, когда его частично закрыть другим окном, после чего открыть - перерисовывается та закрытая часть но не вся клиентская область. Как перерисовать всю клиентскую область?
C++ типовые алгоритмы сортировки типовые алгоритмы сортировки как они выглядят ? подробнее

Показать сообщение отдельно
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
14.07.2010, 17:29     Графы
Во втором задании самое главное это правильно задавать исходную матрицу смежности! Матрица смежности для неориентированного графа должна быть симметричная и по главной диагонали стоять единицы! Если это условие не выполняется, проверка условия задачи 2 не будет выполняться!
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
#include <iostream>
#include <fstream>
using namespace std;
 
int ReadFile(char *name);
void IniMatrix(int **&Array, int n);
int *CheckMatrix(int **Array, int n, int key);
int PrintMatrix(int **Array, int n);
bool isVersh(int **Array, int n, int key, int pos);
bool isGraf(int **Array, int n);
 
int main(){
        ReadFile("test.txt");
        return 0;
}
 
//-----------------------
int ReadFile(char *name){
        ifstream in(name);
        if(!in){ cout <<"Error" << endl; return -1; }
 
        int n = 0;
        in >> n;
        if(n <= 0){ cout << "Error" << endl; return -1; }
 
        int **Array = new int*[n];
        for(int i = 0; i < n; i++)
                Array[i] = new int[n];
 
        IniMatrix(Array,n);
        int value = 0;
        // считываем из матрицы
                for(int i = 0; i < n; i++){
                        for(int j = 0; j < n; j++)
                                if( in >> value ){
                                        Array[i][j] = value;
                                }else{
                                        cout << "Matrix ne polsost zapoln" << endl; break;
                                }
                }
        PrintMatrix(Array,n);
        in.close();
        if( !isGraf(Array,n) ){
            cout << "Graf neorientirov!" << endl; return -1;
        }
 
        int key = 0;
        do{
            cout << "Vvedite vershinu proverki" << endl;
        cin >> key;
        }while(key < 0 || key >= n);
 
        CheckMatrix(Array,n,key);
 
        for(int i = 0; i < n; i++)
                delete []Array[i];
        delete []Array;
        return 0;
}
 
//-------- Инициализация
void IniMatrix(int **&Array, int n){
        for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++)
                        Array[i][j] = 0;
        }
}
 
//-------------------
int *CheckMatrix(int **Array, int n, int key){
    int size = 1;
    for(int i = 0; i < n; i++){
        if( Array[key][i] == 1 )
            size++;
    }
 
    int **newArray = new int*[size];
    for(int i = 0; i < size; i++)
        newArray[i] = new int[size];
 
    int x = 0, y = 0;
    for(int i = 0; i < n; i++){
        if( isVersh(Array,n,key,i) ){
            for(int j = 0; j < n; j++){
                if( isVersh(Array,n,key,j) ){
                    newArray[x][y++] = Array[i][j];
                }
            }
            x++; y = 0;
        }
    }
 
    PrintMatrix(newArray,size);
    for(int i = 0; i < size; i++)
        delete []newArray[i];
    delete []newArray;
    return 0;
}
 
//-----------
bool isVersh(int **Array, int n, int key, int pos){
    if( (Array[pos][key] == 1) || ( (Array[pos][key] == 0) && (pos == key) ) )
        return true;
    return false;
}
 
//-----------
bool isGraf(int **Array, int n){
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if( (Array[i][i] == 1) || (Array[i][j] != Array[j][i]) )
                return false;
        }
    }
    return true;
}
 
//-----------
int PrintMatrix(int **Array, int n){
        for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++)
                        cout << Array[i][j] <<" ";
                cout << endl;
        }
        return 0;
}
Тест для проверки:
4
0 1 1 0
1 0 0 0
1 0 0 0
0 0 0 0
Если мы выберем 0 вершину, то матрица будет размера 3х3
1. 1 вершина -> матрица 2x2
2. 2 вершина -> матрица 2x2
3. 3 вершина -> матрица размерности 1 (изолированная вершина)
Надеюсь условие задачи понял верно =)

Добавлено через 16 минут
Да простит меня форум, но я пост #8 я уже не имею право исправить, поэтому хочу сообщить об ошибке в данном посте
Матрица смежности для неориентированного графа должна быть симметричная и по главной диагонали стоять 0!
В посте #7 быстро сделал по аналогии, но для экономии памяти
C++
1
int *Check = new int[n];
C++
1
2
3
4
5
6
7
8
9
//-------- Инициализация
void IniMatrix(int **&Array, int n, int *&Check){
        for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++)
                        Array[i][j] = 0;
                Check[i] = 0;
        }
        //Check[n] = 0;
}
 
Текущее время: 19:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru