با گرفتن ماتریس مجاورت یک گراف و0=< n،تعداد مسیرهای بطول nبین هر دو راس را بیابد.(زبان c) - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

با گرفتن ماتریس مجاورت یک گراف و0=< n،تعداد مسیرهای بطول nبین هر دو راس را بیابد.(زبان c)

+1 امتیاز
تعداد مسیرهای بطول n=درایه های iوjماتریس مجاورت
سوال شده خرداد 2, 1396  بوسیله ی loker5160 (امتیاز 10)   1 1 2

1 پاسخ

+1 امتیاز

به صورت زیر در c++:

/ C++ program to print all paths from a source to destination.
#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 &, int path_count = -1);

public:
	Graph(int V);   // Constructor
	void addEdge(int u, int v);
	void printAllPaths(int s, int d,int path_count = -1);
};

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, int path_count )
{
	// 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,path_count);
}

// 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, int path_count )
{
	// 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)
	{
		if (path_count != -1) {
			if (path_index == path_count) {
				for (int i = 0; i < path_index; i++)
					cout << path[i] << " ";
				cout << endl;
			}
		}
		else {
			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,path_count);
	}

	// Remove current vertex from path[] and mark it as unvisited
	path_index--;
	visited[u] = false;
}

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,3);


    return 0;
}

 

پاسخ داده شده خرداد 2, 1396 بوسیله ی 13mody (امتیاز 256)   8 36 54
...