20
Примечание:
Вижу опечатку!
Это не влияет на ответ, но в решении я буду предполагать, что вершина без названия (слева сверху) - это вершина Б. А вершина с двумя названиями (по центру сверху) - это вершина Д.
Объяснение:
В таких задачах рекомендую начинать с поиска вершин минимальной степенью (т.е. с минимальным числом связей).
Такие вершины в данном графе: А, Д, Б, Е - их степень равна двум.
В таблицы каким-либо образом им соответствуют столбцы П7, П5, П3, П1. Начнем анализировать, например, с П7. Мы видим что у П7 две связи с П4 и П6. При этом П4 имеет степень 4, а П6 имеет степень 5. Среди них нет вершины со степенью 2 или 3. Значит П7 это не А, не Б, и не К. Потому что у А, Б есть сосед со степенью 2, а у К есть сосед со степенью 3, чего нельзя сказать из таблицы о П7. Значит П7 это пункт Д на графе.
У пункта Д (он же П7) только два соседа - В и Е. Где у В степень 5, а у Е степень 4. Значит, соответственно таблице, В - П6, Е - П4.
Найти необходимо расстояние между В и Е (они же П6 и П4). Смотрим в таблицу, результат 20.
Тут нам несколько повезло, потому что не пришлось долго анализировать таблицу и граф. Мы правильно сделали что начали с П7, но не всегда так удачно выходит.
о повезло повезло, пару минут назад эту же задачу решил :
#include <iostream>
#include <vector>
using namespace std;
void make_matrix(vector<vector<int>> &v){
int n = v.size(), m = v.front().size(), cur = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
v[j][i] = cur;
cur++;
}
}
}
void print_matrix(vector<vector<int>> &v){
int n = v.size(), m = v.front().size();
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++)
cout << v[i][j] << " ";
cout << "\n";
}
}
signed main(){
int n, m;
cin >> n >> m;
vector<vector<int>> a(n, vector<int> (m));
make_matrix(a);
print_matrix(a);
}