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

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

具有优先关系的情况

有向图的邻接矩阵不是双向的
具有这样的规则:在某个顶点输出之前,有些顶点必须先输出。
在图中先找到没有后继顶点的顶点,存入数组中,然后删除。如此循环

//图的顶点public class Vertex {    public char label;//顶点的标识符        public Vertex(char lab) {
//初始化顶点(属性) label=lab; } }
public class Graph {    private final int MAX_VERTS=20;//最大顶点数    private Vertex[] vertexList;//顶点数组    private int [][]adjMat;//顶点关系的领接矩阵(邻接矩阵的每行或者每列的位置跟顶点数组是对应的)    private int nVerts;//当前顶点个数    private char[] sortedArray;//用于存放获取到的顶点数组的值(拓扑排序后的结果)    public Graph() {
//初始化图 vertexList=new Vertex[MAX_VERTS]; //初始化顶点数组 adjMat=new int [MAX_VERTS][MAX_VERTS] ;//初始化邻接矩阵 for(int j=0;j
0) {
//循环条件,如果图中的顶点数为0,就退出循环 int currentVertex=noSuccessorts(); if(currentVertex==-1) { System.out.println("没有存在后继顶点的顶点了 "); return ; } //将没有后继顶点的数据存入数组中(从后开始存) sortedArray[nVerts-1]=vertexList[currentVertex].label; //删除该顶点 deleteVertx(currentVertex); } for(int i=0;i
0) { isEdge=true; break;//退出内层循环,因为只要存在一个就不是要找的顶点 } } if(!isEdge) return row; } return -1;//说明整个循环都没有找到一个 } //删除一个顶点(需要改变邻接矩阵和顶点顶点数组) public void deleteVertx(int delVert) { if(delVert!=(nVerts-1)) {
//如果这个顶点的位置在二维矩阵中是最后一行,删得很简单 for(int j=delVert;j
public class Test {    public static void main(String[] agrs) {        Graph theGraph=new Graph();//创建一个图        theGraph.addVertex('A');//添加顶点        theGraph.addVertex('B');//添加顶点        theGraph.addVertex('C');//添加顶点        theGraph.addVertex('D');//添加顶点        theGraph.addVertex('E');//添加顶点        theGraph.addVertex('F');//添加顶点        theGraph.addVertex('G');//添加顶点        theGraph.addVertex('H');//添加顶点                theGraph.addEdge(0, 4);//添加边        theGraph.addEdge(0, 3);//添加边        theGraph.addEdge(1, 4);//添加边        theGraph.addEdge(2, 5);//添加边        theGraph.addEdge(3, 6);//添加边        theGraph.addEdge(4, 6);//添加边        theGraph.addEdge(5, 7);//添加边        theGraph.addEdge(6, 7);//添加边        theGraph.topo();            }}

 

转载于:https://www.cnblogs.com/S-Mustard/p/7687348.html

你可能感兴趣的文章
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
桥接模式-Bridge(Java实现)
查看>>
303. Range Sum Query - Immutable
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
比较安全的获取站点更目录
查看>>
空间分析开源库GEOS
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
linux php编译安装
查看>>
redis哨兵集群、docker入门
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>