Есть значит граф:
struct list {
int data;
int firstPeak;
int secondPeak;
list* next = 0;
};
struct graph {
int data;
list* List = new list;
};
Связи заданы списком смежных рёбер.
Вот как они добавляются:
void addEdgeRec(list*& List, int firstPeak, int secondPeak, int data) {
if (List->next == 0) {
List->data = data;
List->firstPeak = firstPeak;
List->secondPeak = secondPeak;
List->next = new list;
return;
}
addEdgeRec(List->next, firstPeak, secondPeak, data);
}
graph* addEdge(graph graph[], int firstPeak, int secondPeak, int data) {
addEdgeRec(graph[firstPeak - 1].List, graph[firstPeak-1].data, graph[secondPeak-1].data, data);
addEdgeRec(graph[secondPeak - 1].List, graph[secondPeak-1].data, graph[firstPeak - 1].data, data);
return graph;
}
Нужны функции подсчёта диаметра, те, которые я составил по своей задумке почему-то не работают, как надо. Функции:
int findLength(list* List, int a, int counter = 0) {
if (List->secondPeak == a) {
return counter;
}
if (List->next == 0) {
return counter;
}
return findLength(List->next, a, counter + 1);
}
int findMax(list * List, int size) {
int* arr = new int[size];
for (int a = 0; a < size; a++) {
if (a == List->firstPeak) {
arr[a] = 0;
continue;
}
if (a == List->secondPeak) {
arr[a] = 1;
continue;
}
arr[a] = findLength(List, a);
}
int max = arr[0];
for (int a = 1; a < size; a++) {
if (arr[a] > max) {
max = arr[a];
}
}
return max;
}
int findDiameter(graph Graph[], int size) {
int* arr = new int[size];
for (int a = 0; a < size; a++) {
arr[a] = findMax(Graph[a].List, size);
}
int max = arr[0];
for (int a = 1; a < size; a++) {
if (arr[a] > max) {
max = arr[a];
}
}
return max;
}
Пример ввода (1 вершина, 2 вершина, данные):
1 2 0
2 3 0
3 4 0
Диаметр графа - 3, а программа выводит 2.