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

Графы (с++) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ классы http://www.cyberforum.ru/cpp-beginners/thread77008.html
составить описание класса для представления комплексных чисел. обеспечить выполнение операции представления числа в тригонометрическком виде. желательно с объяснениями.оч прошу
C++ Подправить рабочий код. Программа полностью рабочая, но как сказал препод, она пойдет только на 95, 98 виндоусе((((( Нужно просто поменять какие-то команды, что бы программа запустилась на ХР. Посмотрите/помогите пожалуйста. 1. Цель роботы Изучение функций системного таймера и закрепление практических навыков работы с ним. 3. Постановка задачи Построить модель аналого-цифрового преобразователя (АЦП), которая... http://www.cyberforum.ru/cpp-beginners/thread76996.html
Нужно Описать структуру с именем STUDENT C++
Описать структуру с именем STUDENT, содержащую следующие поля: -фамилия и инициалы -номер группы -успеваемость (массив из пяти элементов) Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT ; записи должны быть упорядочены по возрастанию номера группы -вывести введенные данные на дисплей
C++ рекурсивна функция перевода двоичных цифр в десятичное
Написать рекурсивную функцию перевода двоичных цифр в эквивалентное десятичное число. __________________________________________________ ________________________________ Сам алгоритм есть, а вот с рекурсией все никак не могу правильно сделать. P.s. по возможности объясните алгоритм самой рекурсии в данной задаче. Спасибо. #include <vcl.h> #include <stdio.h> #include <conio.h> int main...
C++ Цикл асм и с++ http://www.cyberforum.ru/cpp-beginners/thread76974.html
Возможно ли использовать цикл с асамблера на с++.? Если да то наведите пример..(вывод сообщения 10 раз)
C++ Работа с текстовыми файлами неизвестног размера Поискал на форуме, но не нашел. Вопрос таков, как считать с строку char* текст из файла. Находил примеры, которые работают через потоки - получалось считывать построчно, но длина считываемой строки была ограничена. Есть ли работающий вариант. В гугле искал, находил примеры, которые компилились, но в ходе считывания возниакло исключение acces violation. подробнее

Показать сообщение отдельно
FMX
10 / 10 / 2
Регистрация: 13.11.2009
Сообщений: 87
17.01.2010, 22:26     Графы (с++)
Привет всем!!!

Народ, помощи прошу. задача про графы. в main-функции я задал один граф списком смежности (то есть какой узел с каким узлом связан.), а другую через for-шлейф. методы в классе создают узлы, ребра, считают их и должны показывать, сколько ребер максимум (int maxGrad()) и минимум (int minGrad()) висит на узлах графа. и ещё лдин метод должен проверять наличие пути от одного узла к другому (bool reachable(uint Node1, uint Node2). все придумал, тока на эти три метода не остается мозгов уже. насчет первых 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
#include <iostream>
using namespace std;
 
typedef unsigned int uint;
 
class Graph {
 
public:
    Graph(uint NoOfNodes);
    void addEdge(uint Node1, uint Node2);
    bool hasEdge(uint Node1, uint Node2);
    uint noOfEdges();
    uint noOfNodes();
    void printGraph();
    int maxGrad();
    int minGrad();
    bool reachable(uint Node1, uint Node2);
    ~Graph();
private:
    uint mNoOfNodes;
    uint **AdjacencyMatrix;
};
 
Graph :: Graph (uint NoOfNodes ) {
    mNoOfNodes = NoOfNodes ;
    AdjacencyMatrix = new uint *[ NoOfNodes ];
    for ( uint i =0; i < NoOfNodes ; i ++)
    AdjacencyMatrix [ i ] = new uint [ NoOfNodes ];
  }
 
Graph::~Graph() {
    if (mNoOfNodes > 0) delete[] AdjacencyMatrix;
}
 
void Graph::addEdge(uint Node1, uint Node2)
{
    AdjacencyMatrix[Node1][Node2]=1;
    AdjacencyMatrix[Node2][Node1]=1;
}
 
bool Graph::hasEdge(uint Node1, uint Node2) {
    if (mNoOfNodes < 1) return false;
    return AdjacencyMatrix[Node1][Node2]==1;
}
 
uint Graph::noOfEdges() {
    uint cnt = 0;
    for (uint i = 0; i < mNoOfNodes; i++){
        for(uint e=0; e<mNoOfNodes; e++){
            if(AdjacencyMatrix[i][e]==1) cnt++;
    }
    }
    return cnt / 2;
}
uint Graph::noOfNodes() {
    return mNoOfNodes;
}
 
int Graph::maxGrad() {
 
}
 
int Graph::minGrad(){
 
}
 
bool Graph::reachable(uint Node1, uint Node2){
 
}
 
void Graph::printGraph(){
    if (noOfNodes() == 0) return;
    cout<<"Anzahl der Knoten: "<<noOfNodes()<<endl;
    cout<<"Anzahl der Kanten: "<<noOfNodes()<<endl;
    cout<<"Maxgrad: "<<maxGrad()<<endl;
    cout<<"Mingrad: "<<minGrad()<<endl;
    for(uint z=0; AdjacencyMatrix[z]!=0; z++){
    cout<<"Knoten "<<z+1<<" ist verbunden mit den/dem Knoten: ";
    for(uint e=0; AdjacencyMatrix[e]!=0; e++){
            if(AdjacencyMatrix[z][e]==1) cout<<e+1<<"  ";
            }
    cout<<endl;
    }
    cout<<endl;
    cout<<endl;
}
 
int main() {
    
    //Statt a, b, c... wird 1, 2, 3... verwendet
 
    Graph b(8);
    cout << "Beispiel b):" << endl;
    uint n = b.noOfNodes();
    for (uint i = 0; i < n; i++)
    b.addEdge(i, (i+1) % n);
    if (b.hasEdge(3,4))
    cout << "Kante (3,4) existiert!" << endl;
    else cout << "Kante (3,4) existiert nicht!" << endl;
    b.maxGrad();
    b.minGrad();
    b.printGraph();
 
    Graph a(7);
    cout << "Beispiel a):" << endl;
    uint f = a.noOfNodes();
    a.addEdge(0, 2);
    a.addEdge(2, 1);
    a.addEdge(1, 6);
    a.addEdge(2, 4);
    a.addEdge(6, 5);
    a.addEdge(5, 4);
    a.addEdge(4, 3);
    a.addEdge(5, 3);
    if (a.hasEdge(0,5))
    cout << "Kante (0,5) existiert!" << endl;
    else cout << "Kante (0,5) existiert nicht!" << endl;
    a.maxGrad();
    a.minGrad();
    a.printGraph();
    return 0;
}
подскажите пожалуйста, кто как может! задание сдавать во вторник (я студент). Заранее благодарю!
PS: не удивляйтесь, что выводы на немецком.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru