Write either a Python or C program to compute the prufer seq

Write either a Python or C++ program to compute the prufer sequence of a tree. The program should take a graph file as a command line argument and output the Prufer sequence of the graph if it is a tree. If not a tree, output a message saying that it isn\'t. Also, assume that the vertices of the graph are labeled 1 to n. The output should look somewhat like the following examples:

prufergraph1.txt:

/findprufer sequence pu fergraphl txt 1 3 3 1 /findprufer sequence pu fergraph2. txt not a tree

Solution

// A C++ Program to check whether a graph is tree or not
#include<iostream>
#include <list>
#include <limits.h>
using namespace std;

// Class for an undirected graph
class Graph
{
    int V;    // No. of vertices
    list<int> *adj; // Pointer to an array for adjacency lists
    bool isCyclicUtil(int v, bool visited[], int parent);
public:
    Graph(int V);   // Constructor
    void addEdge(int v, int w);   // to add an edge to graph
    bool isTree();   // returns true if graph is tree
};

Graph::Graph(int V)
{
    this->V = V;
    adj = new list<int>[V];
}

void Graph::addEdge(int v, int w)
{
    adj[v].push_back(w); // Add w to v’s list.
    adj[w].push_back(v); // Add v to w’s list.
}

// A recursive function that uses visited[] and parent to
// detect cycle in subgraph reachable from vertex v.
bool Graph::isCyclicUtil(int v, bool visited[], int parent)
{
    // Mark the current node as visited
    visited[v] = true;

    // Recur for all the vertices adjacent to this vertex
    list<int>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
    {
        // If an adjacent is not visited, then recur for
        // that adjacent
        if (!visited[*i])
        {
           if (isCyclicUtil(*i, visited, v))
              return true;
        }

        // If an adjacent is visited and not parent of current
        // vertex, then there is a cycle.
        else if (*i != parent)
           return true;
    }
    return false;
}

// Returns true if the graph is a tree, else false.
bool Graph::isTree()
{
    // Mark all the vertices as not visited and not part of
    // recursion stack
    bool *visited = new bool[V];
    for (int i = 0; i < V; i++)
        visited[i] = false;

    // The call to isCyclicUtil serves multiple purposes.
    // It returns true if graph reachable from vertex 0
    // is cyclcic. It also marks all vertices reachable
    // from 0.
    if (isCyclicUtil(0, visited, -1))
             return false;

    // If we find a vertex which is not reachable from 0
    // (not marked by isCyclicUtil(), then we return false
    for (int u = 0; u < V; u++)
        if (!visited[u])
           return false;

    return true;
}

// Driver program to test above functions
int main()
{
    Graph g1(7);
    g1.addEdge(6, 5);
    g1.addEdge(1, 2);
    g1.addEdge(3, 4);
    g1.addEdge(3, 5);
    g1.addEdge(1, 3);
    g1.addEdge(1, 3);
    g1.isTree()? cout << \"Graph is Tree\ \":
                 cout << \"Graph is not Tree\ \";

    Graph g2(7);
    g2.addEdge(1, 0);
    g2.addEdge(0, 2);
    g2.addEdge(2, 1);
    g2.addEdge(0, 3);
    g2.addEdge(3, 4);
    g1.addEdge(3, 4);
    g1.addEdge(1, 4);
    g2.isTree()? cout << \"Graph is Tree\ \":
                 cout << \"Graph is not Tree\ \";

    return 0;
}

Write either a Python or C++ program to compute the prufer sequence of a tree. The program should take a graph file as a command line argument and output the Pr
Write either a Python or C++ program to compute the prufer sequence of a tree. The program should take a graph file as a command line argument and output the Pr

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site