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

Граф - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка по завершению программы http://www.cyberforum.ru/cpp-beginners/thread889291.html
Здравствуйте. Есть вот такая вот программка: #include <math.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctime> void func (int *ptx,int n,int m) {
C++ Производная Добрый день. Как можно вычислить производную полинома, если он представлен в виде а+а2+а3+а4+...аn...ну в степенях соответствующих разумеется. #include <cstdlib> #include <iostream> #include <string> #include <sstream> using namespace std; inline void operator>>(const std::string &s, int &i) http://www.cyberforum.ru/cpp-beginners/thread889289.html
даны два целых числа K и N (N> 0). Вывести N раз число K C++
даны два целых числа K и N (N> 0). Вывести N раз число K. На С++
C++ Если из файла надо вытащить отдельно цифры и отдельно текст - как?
Допустим дан файл: blablabla 1 2 5 4 1 2 lol 12 2 text 12 4 5
C++ фигуры http://www.cyberforum.ru/cpp-beginners/thread889245.html
помогите пожалуста, мож кто делал. есть квадрат, необходимо сделать так, что бы при нажатии на V он менялся на круг, и обратно
C++ Сохранение данных в файле Помогите написать программу чтобы введенная информация сохранялась в файле(.txt) Вот основа: #include <iostream> #include <conio.h> using namespace std; int main() { подробнее

Показать сообщение отдельно
ChuckNorris
2 / 2 / 0
Регистрация: 25.10.2012
Сообщений: 42

Граф - C++

03.06.2013, 16:22. Просмотров 283. Ответов 0
Метки (Все метки)

Помогите пожалуйста нужно реализовать граф, и написать функцию вивода графа і очистки графа

Добавлено через 29 минут
Взял код из этой темы Найти максимальное по числу вершин подмножество который перебирает все элементы графа и виводит все возможние пути между вершинами. Помогите пожалуйста вывести граф и сделать очистку графа

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
// lab1.cpp: определяет точку входа для консольного приложения.
//
 
//#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
// структура Bow состоит из двух целых чисел vertex1 и vertex2
struct Bow
{
    int vertex1, vertex2;
};
//Создание матрици смежности. Входные параметры: дин.массив дуг, кол-во дуг, и вол-во вешин
//Возвращает дин. двумерный массив (матрицу) определяющий граф, т.к. граф - динамический, то и 
//матрица динамическая и возвращается указатель на неё.
int** AdjMatrix(Bow *Bows, int BowNumber, int VertexNumber)
{
    int **AdjMatr = new int*[VertexNumber];     //Выделение памяти для строк
    for(int i = 0; i < VertexNumber; i++)
        AdjMatr[i] = new int[VertexNumber];     //Выделение памяти столбцов
    for( int i = 0; i <  VertexNumber; i++)
        for( int j = 0; j < VertexNumber; j++)
            AdjMatr[i][j] = 0;                  //Изначально она заполняется нулями
    for( int i = 0; i < BowNumber; i++)         //Создается матрица смежности. Если есть дуга от а до b, то в [a,b] ставится еденица
    {
        AdjMatr[ Bows[i].vertex1 - 1][Bows[i].vertex2 - 1] = 1; // Заполнение матрицы.
        AdjMatr[ Bows[i].vertex2 - 1][Bows[i].vertex1 - 1] = 1; //Вычитается единица из-за особенностей работы С++ с матрицами,
    }              
    // итерация идет с 0 по BowNumber - 1 элемент
    return AdjMatr;
    
};
//Изначально не известно сколько всего искомых пар елементов, поэтому берется максимально возможное значение
//Во входных параметрах подается указатель на интовое число, в него запишется кол-во найденых пар элементов
// а, так как обращение идет по адресу, то значение не потеряется после выполнения функции
//Когда все пары найдены, происходит перевыделение памяти и часть освобождается
Bow* FindunAdj(Bow *Bows, int BowNumber, int VertexNumber, int *count)
{
    int maxnumb = VertexNumber*( VertexNumber - 1 )/2;  // Для нахождения нужных вершин нужно обработать только половину матрицы
    *count = 0;                                         // Так, как матрица симметрицна относительно диагонали
    Bow *temp =  new Bow[maxnumb];                      // Так как изначально неизвестно сколько искомых вешин, выделяется память на максимально их число
    int** AdjMatr = AdjMatrix(Bows, BowNumber, VertexNumber);   //Это число является треугольным и вычисляется по формуле n*(n + 1)/2;
    for ( int i = 0; i < VertexNumber; i++)
        for( int j = i + 1; j < VertexNumber; j++)
            if ( AdjMatr[i][j] != 1 )   //если не смежно не равно 1
            {
                temp[*count].vertex1 = i + 1;
                temp[*count].vertex2 = j + 1;
                (*count)++;
            }
    Bow* UnAdj =  (Bow*) realloc (temp, *count * sizeof(Bow));  //Вперевыделяестя память с освобождение лишней памяти
    return UnAdj;
};
 
int main()
{
    int BowNumber, VertexNumber; // Содержит кол-во дуг и вершин для каждого графа ( Bow - дуга, Vertex - вершина )
    Bow *Bows;  // Заранее не известно какого размера граф, поэтому память выделяется динамически в дин. массив структуры Bow (структура Bow описана выше)
                                    // Ввод начальных данных
    printf("Vvedite kol-vo vershin.\n");
    scanf("%d", &VertexNumber);         // Кол-во вершин
    printf("Vvedite kol-vo dug.\n");
    scanf("%d", &BowNumber);                // Кол-во дуг
    Bows = new Bow[BowNumber];              // Выделение памяти под массив дуг
    printf("Vvedite dugi\n");
    for ( int j = 0; j < BowNumber; j++)    // Ввод
    {
        do
        {
            printf( "Duga %d\n", j + 1);
            printf("Vvedite nachalnuu i konechnuu vershinu\n");
            scanf("%d %d", &Bows[j].vertex1, &Bows[j].vertex2); // Вводятся 2 числа начала и конца дуги
        }//Защита от дурака: проверяется введены ли такие значения, которые пренадлежат множеству вешин. Множество вершин {1, ..., VertexNumber }
        while ( !( ( Bows[j].vertex1 <= VertexNumber )  && ( Bows[j].vertex2 <= VertexNumber )  && ( Bows[j].vertex1 > 0 )  && ( Bows[j].vertex2 > 0 ) ) );
    }
    // Вывод всех введённых данных
    printf("V grafe %d vershin i %d dug\n", VertexNumber, BowNumber);
    for ( int j = 0; j < BowNumber; j++ )   // Zapusk cikla
    {
        printf("Duga %d { %d, %d }\n", j + 1, Bows[j].vertex1, Bows[j].vertex2);
    }
    int count;                              // Создается счетчик найденых пар, его адрес передается в функции FindAdj и все изменения в ней произошедшис с count сохранятся
    Bow *UnAdj = FindunAdj(Bows, BowNumber, VertexNumber, &count); //Выполнение функции поиска нужных вершин
    for( int i = 0; i < count; i++)
        printf("Para 1 { %d, %d }\n", UnAdj[i].vertex1, UnAdj[i].vertex2); // Вывод найденых пар
    delete[](UnAdj);
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru