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

Помогите написать программу поиск в ширину - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Продублировать в нем элементы с четными номерами (2, 4, …) http://www.cyberforum.ru/cpp-beginners/thread512446.html
Дан массив размера N. Продублировать в нем элементы с четными номерами (2, 4, …). Условный оператор не использовать.
C++ getpeername возвращает ошибку Получаю сообщение и пытаюсь определить адрес отправителя через: unsigned int len=sizeof addr; int getpeer=getpeername(desc,(struct sockaddr *) &addr, &len); При каждом вызове она возвращает -1, ошибку 310 (Transport endpoint is not connected) При этом IP адреса она возвращает, но я не могу быть уверен что ip правильные, т.к. иногда замечаю среди них локальные (например 192.168.5.55), хотя все... http://www.cyberforum.ru/cpp-beginners/thread512439.html
C++ Передача char массива в MessageBox
Добрый день господа. Не могу решить проблему. Пытаюсь обработать сообщение WM_MOVE и передать координаты окна в MessageBox. Но не знаю как правильно передать или сконвертировать массив типа char* в LPCTSTR. вот код программы: void CMyTestFrame::OnMove(int x, int y) { CFrameWnd::OnMove(x, y); char* coord= new char; sprintf(coord,"Left=%d|Top=%d",x,y);
Удаление из массива всех элементов, встречающихся ровно два раза C++
Дан целочисленный массив размера N. Удалить из массива все эле-менты, встречающиеся ровно два раза, и вывести размер полученного мас-сива и его содержимое
C++ Какая разница между #include<> и #include""? http://www.cyberforum.ru/cpp-beginners/thread512430.html
Позволите спросить несколько вопросов: 1)Какая разница между #include<> и #include"" 2)Если нужно значение объекта и я не собираюсь его менять, есть ли смысл передавать его по ссылке, чтобы избежать его копирования Заранее спасибо!
C++ Динамическая матрица, пять сортировок, перестановки и сравнения Здравствуйте! Нужна помощь с одним заданием... Задается размер квадратной матрицы, заполняется случайными числами, потом выводится таблица с количеством перестановок и сравнений по 5 видам сортировок. Сортируются диагональные элементы матрицы по возрастанию. Типы сортировок: быстрая, выборки, пузырьком, вставкой, шелла. Спасибо! подробнее

Показать сообщение отдельно
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
04.03.2012, 23:19     Помогите написать программу поиск в ширину
Здравствуйте!
Необходимо написать такую программу:
Входные данные - количество вершин графа и его ребра. Выход - вектор, содержащий кратчайшие пути из корня к соответствующей вершине.

выдает 0

Вот один из вариантов:
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
#define N       500
 
typedef int graph_t[N][N];
typedef int labels_t[N];
 
struct queue_t
{
        // информационное поле
        int value;
        struct queue_t *next;
};
 
int scan_graph(graph_t graph)
{
        int tops_count, edges_count;
        int i,j,k;
 
        printf("Enter: ");
        scanf("%d",&tops_count);
        scanf("%d",&edges_count);
 
        for (i = 0; i < tops_count; i++)
                for (j = 0; j < tops_count; j++)
                        graph[i][j] = 0;
 
        for (k = 0; k < edges_count; k++)
        {
                scanf("%d%d", &i, &j);
                graph[i][j] = 1;
        }
 
        return tops_count;
}
 
void push(struct queue_t **start, struct queue_t **end, int value)
{
        struct queue_t *q = (struct queue_t *)malloc(sizeof(struct queue_t));
 
        q->next = NULL;
        q->value = value;
 
        if (*end != NULL)
        {
                (*end)->next = q;
                *end = q;
        }
        else
        {
                *start = q;
                *end = *start;
        }
}
 
int pop(struct queue_t **start, struct queue_t **end)
{
        int v = (*start)->value;
 
        struct queue_t *q = (*start)->next;
 
        free(*start);
 
        *start = q;
 
        if (*start == NULL)
                *end = NULL;
 
        return v;
}
 
int tops_count;
graph_t graph;
labels_t labels;
 
void func(graph_t graph, labels_t labels, int tops_count, int start_top)
{
        // поиск в ширину
        int i;
 
        for (i = 0; i < tops_count; i++)
                labels[i] = 0;
 
        struct queue_t *start = NULL, *end = NULL;
 
        push(&start, &end, start_top);
        labels[start_top] = 1;
 
        do
        {
                int top = pop(&start, &end);
 
                for (i = 0; i < tops_count; i++)
                        if (!labels[i] && graph[top][i])
                        {
                                labels[i] = 1;
                                push(&start, &end, i);
                        }
        } while (start != NULL);
}
 
int main()
{
        int i;
 
        tops_count = scan_graph(graph);
        func(graph,labels,tops_count,0);
 
        for (i = 0; i < tops_count; i++)
                if (labels[i])
                        printf("%d ", i);
 
        printf("\n");
 
        getch();
 
        return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru