拓扑排序——判断有向图是否存在回路
来源:互联网 发布:知到智慧树形势与政策 编辑:程序博客网 时间:2024/06/07 00:49
头文件"AdjGraph.h"
#include<iostream>#define VISITED 1#define UNVISITED 0#define EXIST 1#define INEXIST 0using namespace std;class AdjGraph{public:int **edge;int *mark;int *indegree;int vertexNum,edgeNum;AdjGraph(int v){vertexNum=v;edgeNum=0;edge=new int* [vertexNum];for(int i=0;i<vertexNum;i++)edge[i]=new int [vertexNum];mark=new int [vertexNum];indegree=new int [vertexNum];for(int i=0;i<vertexNum;i++){indegree[i]=0;mark[i]=UNVISITED;}for(int i=0;i<vertexNum;i++)for(int j=0;j<vertexNum;j++)edge[i][j]=INEXIST;}~AdjGraph(){delete [] mark;delete [] indegree;for(int i=0;i<vertexNum;i++)delete [] edge[i];delete [] edge;}void setedge(int v,int u){edge[v][u]=EXIST;edgeNum++;indegree[u]++;}bool TopSort(){//循环vertexNum次,每次标记一个入度为0的顶点for(int i=0;i<vertexNum;i++){int j;//若找到找到入度为0的顶点则跳出循环for(j=0;j<vertexNum;j++){if(indegree[j]==0 && mark[j]==UNVISITED)break;}if(j==vertexNum)return false;//删除顶点mark[j]=VISITED;//删除与顶点相关的边,和相关的顶点入度减1for(int k=0;k<vertexNum;k++){if(edge[j][k]==EXIST){edge[j][k]=INEXIST;edgeNum--;indegree[k]--;}}}return true;}void showLoop(){for(int i=0;i<vertexNum;i++)for(int j=0;j<vertexNum;j++)if(edge[i][j]==EXIST)cout<<"v"<<i+1<<"->"<<"v"<<j+1<<endl;}};
源文件"main.cpp"
#include<iostream>#include"AdjGraph.h"using namespace std;int main(){AdjGraph AG(6);AG.setedge(0,1);AG.setedge(0,2);AG.setedge(2,4);AG.setedge(4,5);AG.setedge(3,5);AG.setedge(5,2);//反向即为无环图if(AG.TopSort())cout<<"no loop"<<endl;else{cout<<"loop:"<<endl;AG.showLoop();}return 0;}
0 0
- 判断有向图是否存在回路—拓扑排序
- 拓扑排序——判断有向图是否存在回路
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- 小米2015校招(2014-9-25合肥) 排队 图 有向图是否存在回路 拓扑排序
- HDOJ 4324 Triangle LOVE(拓扑排序判断有向图是否存在环)
- HDOJ 3342 Legal or Not(拓扑排序判断有向图是否存在环)
- 判断有向图是否存在环的2种方法(深度遍历,拓扑排序)
- 拓扑法判断有向图回路
- 判断有向图是否有环及拓扑排序
- 判断无向图是否有回路
- 判断无向图是否有回路
- zoj2016Play on words(判断有向图是否存在欧拉回路通路)
- UVa10129 判断有向图中是否存在欧拉回路
- POJ——1308Is It A Tree?(模拟拓扑排序判断有向图是否为树)
- 关于无向图判断是否存在回路的方法
- sdut 2140 有向图中是否存在拓扑序列的判断
- java前两章自己总结
- 其实Unix很简单
- 零缺陷编程读书笔记(一)引言
- unity地形Terrain浅谈
- 再谈我是怎么招聘程序员的
- 拓扑排序——判断有向图是否存在回路
- 那点所谓的分布式——memcache
- Tair
- Android仿人人客户端(v5.7.1)——网络模块处理的架构
- PV 并发量的计算
- 多线程第三篇:关键段(临界区)
- 理解Android系统的进程间通信原理(一)----RPC中的代理模式
- 在Lu脚本中绘制普通XY图(折线图)
- 对Java语言入门初学者的一些建议