摘要: 拓扑排序的裸体,全裸的那种一点变形和要求都没有用DFS来实现//用dfs解决拓扑排序//用一个标记数组vis来标记//0表示还没有访问过,1表示正在访问,2表示已经访问过并且存入拓扑数组#include <stdio.h>#include <string.h>#define MAX 110int g[MAX][MAX],vis[MAX];int n,m,c,top[MAX];int dfs(int u){ int v; vis[u]=1; for(v=1; v<=n; v++) if(g[u][v]) { if(vis[v]==1) return 0; ... 阅读全文
posted @ 2012-10-17 19:13 Titanium 阅读(183) 评论(0) 推荐(1) 编辑
摘要: 拓扑排序入门题,可以用STL来做,这份代码中没有用对于给出的图判断是否为有向无环图(dag),若不是,输出-1其实是按层来处理拓扑序列,算法是先找出入度为0的点,然后删除所有以这些顶点为弧尾的弧,使弧头的入度减1,然后再看下一轮的顶点中那些顶点入度为0,然后依此类推,直到所有点的入度都为0,如果最后结束的时候所有点入度为0,那么是一个dag,否则不是,输出-1,这个过程可以用队列来实现,这个代码里面没有这样做,而是每一层都重新扫描一遍,找出入度为0的顶点(之前已经纳入拓扑序列的顶点就用vis[i]=1来标记),应该用队列实现的话时间会更好另外其中是要构建邻接表的,用数组来构建,当然可以直接用S 阅读全文
posted @ 2012-10-17 18:45 Titanium 阅读(899) 评论(0) 推荐(0) 编辑