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

Задачка по графам - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, является ли данное пятизначное число палиндромом http://www.cyberforum.ru/cpp-beginners/thread533964.html
Программа должна определять, является ли данное пятизначное число палиндромом. Палиндром-число или текст, который читается одинаково как слева так и справа:939; 49094; 11311. Как определить является число палиндромом или нет? Код можно не писать, объясните "на словах".
C++ Выбор цифрами и выход Кто может поделиться кодом как сделать чтоб отображение пункта было не только посредством кнопок (вверх-вниз) но и цифрами 1 2 3 4 5 и т.д А так-же подскажите как сделать так чтоб при выходе из программы нам задавался вопрос: Хотите выйти Да Нет. Если же да то программа закрывается, если нет то остаётся на прежнем пункте. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread533953.html
Написать программу, которая вычеркивает столбец с номером р C++
Дана матрица А(nxn). Написать программу, которая вычеркивает столбец с номером р и переставляет остальные так, чтобы получилась матрица nx(m-1).
C++ Написать программу нахождения угла между векторами и плоскостью.
Дан вектор а=(a1, a2, a3) и плоскость, заданная уравнением Ах+Ву+Сz=0. Написать программу нахождения угла между векторами и плоскостью. Help me please
C++ Переменная 'a' нигде не используется http://www.cyberforum.ru/cpp-beginners/thread533949.html
#include<conio.h> #include<stdio.h> #include<math.h> double f(double x) { double p=pow(x,3)/9+2*x-10; return p; }
C++ В последовательности целых чисел заменить все элементы, меньшие заданного числа, этим числом Собственно такая задача) Буду благодарен за любую помощь. подробнее

Показать сообщение отдельно
kdv12
1 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 33

Задачка по графам - C++

29.03.2012, 18:26. Просмотров 725. Ответов 5
Метки (Все метки)

Здравствуйте уважаемые знатоки! Необходима помощь по графам. Написал прогу, но не могу откомпилировать. Сломал голову, пытаясь понять суть ошибок. Может кто поможет в разборе кода?

Файл graph.h

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
#ifndef GRAPH_H
#define GRAPH_H
 
template <class Item>
class Graph
{
    static const size_t MAXIMUM = 6;
    size_t many_vertices;
    bool edges [MAXIMUM] [MAXIMUM];
    Item labels [MAXIMUM];
 
    public:
 
        Graph() { many_vertices = 0; } // Конструктор
        void add_vertex (const Item &label); // Метод добавления вершины
        void add_edge (size_t source, size_t target); // Метод добавления ребра
        void remove_edge (size_t source, size_t target); // Метод удаления ребра
        Item& operator[] (size_t vertex);
 
        size_t size() const { return many_vertices; }
        bool is_edge const (size_t source, size_t target);
        set<size_t> neighbors const (size_t vertex);
};
 
#endif
Файл graph.cpp

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
#include "graph.h"
#include <set.h>
#include <iostream>
#include <cstdlib>
 
template <class Item>
void Graph <Item>::add_vertex(const Item &label)
{
    size_t new_vertex_number, i;
 
    if(many_vertices>=MAXIMUM) return;
 
    new_vertex_number = many_vertices++;
 
    // нет ребер
    for(i=0; i<many_vertices; i++)
    {
        edges[i][new_vertex_number] = false; 
        edges[new_vertex_number][i] = false;
    }
 
    //установка метки
    labels[new_vertex_number] = label;
}
 
template <class Item>
void Graph <Item>::add_edge(size_t source, size_t target) // Метод добавления ребра
{
    if(source<many_vertices && target<many_vertices) edges[source][target] = true;
}
 
template <class Item>
void Graph <Item>::remove_edge(size_t source, size_t target) // Метод удаления ребра
{
    if(source<many_vertices && target<many_vertices) edges[source][target] = false;
}
 
template <class Item>
Item& Graph <Item>::operator[](size_t vertex) // Метод перегрузки оператора индексирования
{
    if(vertex<many_vertices) return labels[vertex];
 
    exit(1);
}
 
template <class Item>
bool Graph <Item>::is_edge(size_t source, size_t target) const // Метод проверки существования ребра из вершины source в вершину target
{
    if(source<many_vertices && target<many_vertices) return edges[source][target];
}
 
template <class Item>
set<size_t> Graph <Item>::neighbors (size_t vertex) const
{
    //определение объекта класса set
    set<size_t> answer;
 
    //определение переменной целого типа
    size_t i;
 
    //если вершина vertex существует в графе
    if(vertex<many_vertices)
    {
        //Добавление в множество номеров всех вершин, выходящих из вершины //vertex
        for(i=0; i<many_vertices; i++) if(edges[vertex][i]) answer.insert(i);
    }
    
    //возвращение множества
    return answer;
}
 
template <class Item>
void Creat_graph(Graph<Item> &ob, size_t arr[][size])
{
    for(size_t i=0; i<size; i++) ob.add_vertex(i);
 
    for(size_t i=0; i<size; i++)
        for(size_t j=0; j<size; j++)
            if(arr[i][j]) ob.add_edge(i, j);
}
Файл main.cpp

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
#include "graph.h"
#include <set>
#include <iostream>
#include <cstdlib>
 
void main()
{
    size_t arr[size][size] = {0,1,0,1,
        0,0,1,0,
        0,0,0,0,
        0,1,1,0};
 
    Graph <int> ob;
    Creat_graph(ob, arr);
 
    set<size_t> connect;
    set<size_t> ::iterator it;
 
    for(size_t i=0; i<4; i++)
    {
        connect = ob.neighbors(i);
        for(it=connect.begin(); it!=connect.end(); it++)
            cout<<*it<<'\t';
 
        cout<<endl;
    }
 
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru