博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Topological Sorting(拓扑排序)
阅读量:6894 次
发布时间:2019-06-27

本文共 5812 字,大约阅读时间需要 19 分钟。

程序来源:。

C++程序如下:

// A C++ program to print topological sorting of a DAG#include
#include
#include
using namespace std; // Class to represent a graphclass Graph{ int V; // No. of vertices' // Pointer to an array containing adjacency listsList list
*adj; // A function used by topologicalSort void topologicalSortUtil(int v, bool visited[], stack
&Stack);public: Graph(int V); // Constructor // function to add an edge to graph void addEdge(int v, int w); // prints a Topological Sort of the complete graph void topologicalSort();}; Graph::Graph(int V){ this->V = V; adj = new list
[V];} void Graph::addEdge(int v, int w){ adj[v].push_back(w); // Add w to v’s list.} // A recursive function used by topologicalSortvoid Graph::topologicalSortUtil(int v, bool visited[], stack
&Stack){ // Mark the current node as visited. visited[v] = true; // Recur for all the vertices adjacent to this vertex list
::iterator i; for (i = adj[v].begin(); i != adj[v].end(); ++i) if (!visited[*i]) topologicalSortUtil(*i, visited, Stack); // Push current vertex to stack which stores result Stack.push(v);} // The function to do Topological Sort. It uses recursive // topologicalSortUtil()void Graph::topologicalSort(){ stack
Stack; // Mark all the vertices as not visited bool *visited = new bool[V]; for (int i = 0; i < V; i++) visited[i] = false; // Call the recursive helper function to store Topological // Sort starting from all vertices one by one for (int i = 0; i < V; i++) if (visited[i] == false) topologicalSortUtil(i, visited, Stack); // Print contents of stack while (Stack.empty() == false) { cout << Stack.top() << " "; Stack.pop(); }} // Driver program to test above functionsint main(){ // Create a graph given in the above diagram Graph g(6); g.addEdge(5, 2); g.addEdge(5, 0); g.addEdge(4, 0); g.addEdge(4, 1); g.addEdge(2, 3); g.addEdge(3, 1); cout << "Following is a Topological Sort of the given graph \n"; g.topologicalSort(); return 0;}
程序运行结果(下同):
Following is a Topological Sort of the given graph5 4 2 3 1 0
Java程序如下:
// A Java program to print topological sorting of a DAGimport java.io.*;import java.util.*; // This class represents a directed graph using adjacency// list representationclass Graph{    private int V;   // No. of vertices    private LinkedList
adj[]; // Adjacency List //Constructor Graph(int v) { V = v; adj = new LinkedList[v]; for (int i=0; i
it = adj[v].iterator(); while (it.hasNext()) { i = it.next(); if (!visited[i]) topologicalSortUtil(i, visited, stack); } // Push current vertex to stack which stores result stack.push(new Integer(v)); } // The function to do Topological Sort. It uses // recursive topologicalSortUtil() void topologicalSort() { Stack stack = new Stack(); // Mark all the vertices as not visited boolean visited[] = new boolean[V]; for (int i = 0; i < V; i++) visited[i] = false; // Call the recursive helper function to store // Topological Sort starting from all vertices // one by one for (int i = 0; i < V; i++) if (visited[i] == false) topologicalSortUtil(i, visited, stack); // Print contents of stack while (stack.empty()==false) System.out.print(stack.pop() + " "); } // Driver method public static void main(String args[]) { // Create a graph given in the above diagram Graph g = new Graph(6); g.addEdge(5, 2); g.addEdge(5, 0); g.addEdge(4, 0); g.addEdge(4, 1); g.addEdge(2, 3); g.addEdge(3, 1); System.out.println("Following is a Topological " + "sort of the given graph"); g.topologicalSort(); }}// This code is contributed by Aakash Hasija
Python程序如下:
#Python program to print topological sorting of a DAGfrom collections import defaultdict #Class to represent a graphclass Graph:    def __init__(self,vertices):        self.graph = defaultdict(list) #dictionary containing adjacency List        self.V = vertices #No. of vertices     # function to add an edge to graph    def addEdge(self,u,v):        self.graph[u].append(v)     # A recursive function used by topologicalSort    def topologicalSortUtil(self,v,visited,stack):         # Mark the current node as visited.        visited[v] = True         # Recur for all the vertices adjacent to this vertex        for i in self.graph[v]:            if visited[i] == False:                self.topologicalSortUtil(i,visited,stack)         # Push current vertex to stack which stores result        stack.insert(0,v)     # The function to do Topological Sort. It uses recursive     # topologicalSortUtil()    def topologicalSort(self):        # Mark all the vertices as not visited        visited = [False]*self.V        stack =[]         # Call the recursive helper function to store Topological        # Sort starting from all vertices one by one        for i in range(self.V):            if visited[i] == False:                self.topologicalSortUtil(i,visited,stack)         # Print contents of stack        print stack g= Graph(6)g.addEdge(5, 2);g.addEdge(5, 0);g.addEdge(4, 0);g.addEdge(4, 1);g.addEdge(2, 3);g.addEdge(3, 1); print "Following is a Topological Sort of the given graph"g.topologicalSort()#This code is contributed by Neelam Yadav

转载于:https://www.cnblogs.com/tigerisland/p/7564085.html

你可能感兴趣的文章
2.1 LVM逻辑卷管理
查看>>
单片机编程入门学习 这几问你能回答吗?
查看>>
如何拆分PDF页面?这个简单方法你一定没用过
查看>>
邮件协议
查看>>
Responsive Web Design 响应式网页设计
查看>>
织梦cms列表页{dede:list}标签实现按文章权重weight排序的方法
查看>>
jira部署,主机迁移,数据库迁移,jira
查看>>
众美集团携手万科物业 树立济南人居高标准
查看>>
形象比你的头衔更重要 看过悦嘉丽形象锻造营你就知道为什么
查看>>
Oracle 数据库导出数据泵(EXPDP)文件存放的位置
查看>>
组播中如何把广播流量转为组播流量
查看>>
ZooKeeper服务命令
查看>>
利用虚拟化实现应用发布与网络隔离
查看>>
redis两种调用方式实例
查看>>
我的友情链接
查看>>
oracle分区表
查看>>
(转载)centos6.5下安装mysql
查看>>
宽带用户防范“***”***十大招式
查看>>
PHP5.4第一天—基本语法
查看>>
thinkphp 5.0 index.php被替换成首页内容,被注入恶意代码
查看>>