Cod sursa(job #2425736)

Utilizator MikeVMihai Vasilescu MikeV Data 25 mai 2019 00:22:04
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
// C++ program to print DFS traversal from 
// a given vertex in a given graph 
#include<iostream>
#include<list>
using namespace std;

// Graph class represents a directed graph 
// using adjacency list representation 
class Graph
{
	int muchii; // No. of vertices
	
	// Pointer to an array containing 
	// adjacency lists 
	list<int> *adj;
	
	// A recursive function used by DFS 
	void DFSUtil(int nod, bool vizitat[]);
public:
	Graph(int V); // Constructor
	
	// function to add an edge to graph 
	void addEdge(int v, int w);
	
	// DFS traversal of the vertices 
	// reachable from v 
	void DFS(int sursa);
};

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

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

void Graph::DFSUtil(int nod, bool vizitat[])
{
	// Mark the current node as visited and 
	// print it 
	vizitat[nod] = true;
	cout << nod << " ";
	
	// Recur for all the vertices adjacent 
	// to this vertex 
	list<int>::iterator i;
	for (i = adj[nod].begin(); i != adj[nod].end(); ++i)
		if (!vizitat[*i])
			DFSUtil(*i, vizitat);
}

// DFS traversal of the vertices reachable from v. 
// It uses recursive DFSUtil() 
void Graph::DFS(int sursa)
{
	// Mark all the vertices as not visited 
	bool *vizitat = new bool[muchii];
	for (int i = 0; i < muchii; i++)
		vizitat[i] = false;
	
	// Call the recursive helper function 
	// to print DFS traversal 
	DFSUtil(sursa, vizitat);
}

int main()
{
	// Create a graph given in the above diagram 
	Graph g(4);
	g.addEdge(0, 1);
	g.addEdge(0, 2);
	g.addEdge(1, 2);
	g.addEdge(2, 0);
	g.addEdge(2, 3);
	g.addEdge(3, 3);
	
	cout << "DFS cu sursa nodul 2\n";
	g.DFS(2);
	
	return 0;
}