Для заданного невзвешенного ориентированного графа и Q запросов, состоящих из последовательностей обхода между двумя узлами графа, задача состоит в том, чтобы выяснить, представляют ли последовательности один из кратчайших путей между двумя узлами.
Примеры:
Input: 1 2 3 4
Output: NO
Explanation:
The first and last node of the input sequence
is 1 and 4 respectively. The shortest path
between 1 and 4 is 1 -> 3 -> 4 hence,
the output is NO for the 1st example.
Input: 1 3 4
Output: YES
Подходить: Идея состоит в том, чтобы использовать алгоритм Флойда Варшалла для хранения длины всех пар вершин. Если длина кратчайшего пути между начальным и конечным узлом последовательности на единицу меньше длины последовательности, то данная последовательность представляет один из самых коротких путей между узлами.
Ниже приведена реализация вышеуказанного подхода:
C ++
// C ++ программа для // вышеуказанный подход #include <bits/stdc++.h>
usingnamespacestd;
#define INFINITE 10000
// Функция для хранения // длина кратчайшего пути // между всеми парами узлов