поиск необходимой вершины в графе

75
12 декабря 2021, 01:50

Реализую задачку " Найти такую вершину заданного графа, которая принадлежит каждому пути между двумя выделенными (различными) вершинами и отлична от каждой из них." Составила такой алгоритмик : 1 Перебираю все возможные пути между двумя точками (и сохраняю все пройденные вершинки в список) 2 все эти списки пересекаем друг с другом 3 пересеченные вершины и есть ответом пока есть алгоритм поиска всех возможных путей и вывод этих самых вершинок, но я не понимаю, как реализовать (добавить сохранение вершинок в список) пересечение этих списков. буду очень благодарна за помощь, тк только учусь

#include<iostream> 
#include <list> 
using namespace std; 
// A directed graph using adjacency list representation 
class Graph 
{ 
    int V; // No. of vertices in graph 
    list<int> *adj; // Pointer to an array containing adjacency lists 
    // A recursive function used by printAllPaths() 
    void printAllPathsUtil(int , int , bool [], int [], int &); 
public: 
    Graph(int V); // Constructor 
    void addEdge(int u, int v); 
    void printAllPaths(int s, int d); 
}; 
Graph::Graph(int V) 
{ 
    this->V = V; 
    adj = new list<int>[V]; 
} 
void Graph::addEdge(int u, int v) 
{ 
    adj[u].push_back(v); // Add v to u’s list. 
} 
// Prints all paths from 's' to 'd' 
void Graph::printAllPaths(int s, int d) 
{ 
    // Mark all the vertices as not visited 
    bool *visited = new bool[V]; 
    // Create an array to store paths 
    int *path = new int[V]; 
    int path_index = 0; // Initialize path[] as empty 
    // Initialize all vertices as not visited 
    for (int i = 0; i < V; i++) 
        visited[i] = false; 
    // Call the recursive helper function to print all paths 
    printAllPathsUtil(s, d, visited, path, path_index); 
} 
// A recursive function to print all paths from 'u' to 'd'. 
// visited[] keeps track of vertices in current path. 
// path[] stores actual vertices and path_index is current 
// index in path[] 
void Graph::printAllPathsUtil(int u, int d, bool visited[], 
                            int path[], int &path_index) 
{ 
    // Mark the current node and store it in path[] 
    visited[u] = true; 
    path[path_index] = u; 
    path_index++; 
    // If current vertex is same as destination, then print 
    // current path[] 
    if (u == d) 
    { 
        for (int i = 0; i<path_index; i++) 
            cout << path[i] << " "; 
        cout << endl; 
    } 
    else // If current vertex is not destination 
    { 
        // Recur for all the vertices adjacent to current vertex 
        list<int>::iterator i; 
        for (i = adj[u].begin(); i != adj[u].end(); ++i) 
            if (!visited[*i]) 
                printAllPathsUtil(*i, d, visited, path, path_index); 
    } 
    // Remove current vertex from path[] and mark it as unvisited 
    path_index--; 
    visited[u] = false; 
} 
// Driver program 
int main() 
{ 
    // Create a graph given in the above diagram 
    Graph g(4); 
    g.addEdge(0, 1); 
    g.addEdge(0, 2); 
    g.addEdge(0, 3); 
    g.addEdge(2, 0); 
    g.addEdge(2, 1); 
    g.addEdge(1, 3); 
    int s = 2, d = 3; 
    cout << "Following are all different paths from " << s 
        << " to " << d << endl; 
    g.printAllPaths(s, d); 
    return 0; 
}
READ ALSO
C++ кавычки в строке

C++ кавычки в строке

Пытаюсь разработать программу на С++ по созданию древа каталогов и назначение разрешений к ним через PowerShell

92
как правильно закрыть диалоговое окно

как правильно закрыть диалоговое окно

Открываю диалоговое окно:

231
QT C++ Создание ISO-образа

QT C++ Создание ISO-образа

Появилась задача создать простую программу для создания ISO-образов с компакт-диска на C++Однако, в дебрях интернета несколько запутался и не смог...

237
Библиотека mpich

Библиотека mpich

такая проблема, есть программа, которая реализуется сортировку методом двухпутевого слияния, нужно при помощи библиотеки mpich реализовать...

216