首页 > 代码库 > poj 4084:拓扑排序
poj 4084:拓扑排序
poj 4084:拓扑排序
很好的题目,恶心的算法
给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前。
v<=100, a<=500
6 8 1 2 1 3 1 4 3 2 3 5 4 5 6 4 6 5
v1 v3 v2 v6 v4 v5
解题方案
显然这是有向图,然后用了一个个人感觉恶心的算法,个人建了一个倒排表,例如针对上述数据
对于invertlist的下标 i,其对应的元素为一个list,其为 能到达 i+1 的结点集合
例如 i =1 时, 则有 1 -> 2 和 3 -> 2
有这样一个表我们就很方便的检测出哪些结点入度为 0,然后就为拓扑排序解决了做了很好的铺垫
个人代码
#include <iostream> #include <fstream> #include <list> #include <vector> #include <algorithm> using namespace std; typedef pair<int,int> edge; typedef list<int> *elem; void Topological_sort(vector<elem> &invertList); void read_data(edge* & data,int &v,int &e); void main_solution(); vector<elem> invert_list(edge * data,int v,int e); int main() { main_solution(); system("pause"); return 0; } void read_data(edge* & data,int &v,int &e) { ifstream reader; reader.open("data.txt"); reader>>v; reader>>e; data = http://www.mamicode.com/new edge[e];>
poj 4084:拓扑排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。