Чтобы вычислить индивидуальный балл ketz(v1,v2)
, вам просто нужно рассмотреть подматрицу смежности, которая содержит только вершины, которые находятся на расстоянии менее 4 от v1 или v2.
Вы можете найтиэти вершины используют поиск по дыханию из v1 и из v2.
Но на самом деле вы можете добиться гораздо большего, если будете непосредственно считать #paths при выполнении BFS, начиная с v1.Вам нужно только запомнить расстояние от v1 и в каждой вершине проверить, достигли ли вы v2.Если это так, увеличьте значение соответствующего счетчика.
Что-то вроде этого (псевдокод):
Queue q = new Queue();
q.enqueue((v1, 0));
int[] counts = new int[] { 0,0,0,0,0 };
while (!q.empty()) {
(v, dist) = q.dequeue();
for(Vertex w : v.Neighbors()) {
if(dist < 3)
q.enqueue((w, dist+1));
if(dist < 4 && w == v2)
counts[dist+1]++;
}
}
Так что после запуска вы получите counts[n] = paths_n(v1,v2)
для n = 1,2,3,4