package com.tech.cglibx; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Map; import java.util.Set; public class MyGraph { public static void main(String[] args) { Graph graph = new Graph(); Set<Vertex> vertexSet = graph.getVertexSet(); Map<Vertex, Vertex[]> edgeMap = graph.getAdjacencys(); Vertex twoVertex = new Vertex("2"); Vertex threeVertex = new Vertex("3"); Vertex fiveVertex = new Vertex("5"); Vertex sevenVertex = new Vertex("7"); Vertex eightVertex = new Vertex("8"); Vertex nineVertex = new Vertex("9"); Vertex tenVertex = new Vertex("10"); Vertex elevenVertex = new Vertex("11"); vertexSet.add(twoVertex); vertexSet.add(threeVertex); vertexSet.add(fiveVertex); vertexSet.add(sevenVertex); vertexSet.add(eightVertex); vertexSet.add(nineVertex); vertexSet.add(tenVertex); vertexSet.add(elevenVertex); edgeMap.put(twoVertex, new Vertex[] { elevenVertex }); edgeMap.put(nineVertex, new Vertex[] { elevenVertex, eightVertex }); edgeMap.put(tenVertex, new Vertex[] { elevenVertex, threeVertex }); edgeMap.put(elevenVertex, new Vertex[] { sevenVertex, fiveVertex }); edgeMap.put(eightVertex, new Vertex[] { sevenVertex, threeVertex }); topologicalSort2(graph,twoVertex); //Vertex[] sortedVertexs = topologicalSort(graph); //printVertex(sortedVertexs); } public static void printVertex(Vertex[] Vertexs) { for (Vertex vertex : Vertexs) { System.out.println(vertex.getName() + " discover time:" + vertex.getDiscover() + " finish time:" + vertex.getFinish()); } } static class TimeRecorder { private int time = 0; public int getTime() { return time; } public void setTime(int time) { this.time = time; } } public static Vertex[] topologicalSort(Graph graph) { Set<Vertex> vertexSet = graph.getVertexSet(); if (vertexSet.size() < 2) { return vertexSet.toArray(new Vertex[0]); } LinkedList<Vertex> sortedList = new LinkedList<Vertex>(); TimeRecorder recorder = new TimeRecorder(); for (Vertex vertex : vertexSet) { if (vertex.color == Color.WHITE) { visitVertex(graph, vertex, recorder, sortedList); } } return sortedList.toArray(new Vertex[0]); } public static void topologicalSort2(Graph graph,Vertex vertex) { LinkedList<Vertex> sortedList = new LinkedList<Vertex>(); TimeRecorder recorder = new TimeRecorder(); visitVertex(graph, vertex, recorder, sortedList); System.out.println(sortedList); } /** * 深度优先搜索(Depth First Search) */ public static void visitVertex(Graph graph, Vertex vertex, TimeRecorder recorder, LinkedList<Vertex> sortedList) { recorder.time += 1; vertex.color = Color.GRAY; vertex.discover = recorder.time; Map<Vertex, Vertex[]> edgeMap = graph.getAdjacencys(); Vertex[] adjacencys = edgeMap.get(vertex); if (adjacencys != null && adjacencys.length > 0) { for (Vertex adjacency : adjacencys) { if (adjacency.color == Color.WHITE) { adjacency.parent = vertex; visitVertex(graph, adjacency, recorder, sortedList); } } } recorder.time += 1; vertex.color = Color.BLACK; vertex.finish = recorder.time; sortedList.addLast(vertex); } enum Color { WHITE, GRAY, BLACK } static class Vertex { private String name; private Color color; private Vertex parent; private int discover; private int finish; @Override public String toString() { return String.format("Vertex [name=%s, color=%s, parent=%s]", name, color, parent); } public Vertex(String name) { this.name = name; this.color = Color.WHITE; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public Vertex getParent() { return parent; } public void setParent(Vertex parent) { this.parent = parent; } public int getDiscover() { return discover; } public void setDiscover(int discover) { this.discover = discover; } public int getFinish() { return finish; } public void setFinish(int finish) { this.finish = finish; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Vertex other = (Vertex) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } static class Graph { private Set<Vertex> vertexSet = new HashSet<Vertex>(); // 相邻的节点 private Map<Vertex, Vertex[]> adjacencys = new HashMap<Vertex, Vertex[]>(); public Set<Vertex> getVertexSet() { return vertexSet; } public void setVertexSet(Set<Vertex> vertexSet) { this.vertexSet = vertexSet; } public Map<Vertex, Vertex[]> getAdjacencys() { return adjacencys; } public void setAdjacencys(Map<Vertex, Vertex[]> adjacencys) { this.adjacencys = adjacencys; } } }
相关推荐
《Graph Cut算法详解及其在CODE_MAP中的应用》 在计算机科学和图像处理领域,Graph Cut算法是一种被广泛应用的优化技术,特别是在图像分割和立体视觉中。本文将详细解析Graph Cut算法的基本原理,并结合CODE_MAP的...
some websites for graph coloring and joe cuberson's graph coloring and graph generator in gnu c++ in unix and a very smart c++ source code for vertex coloring in vc++.
Graph-Based Visual Saliency (MATLAB source code)
在这个"graph cut code"的压缩包中,我们可以看到一系列与实现该算法相关的文件。 1. **waterfall.bmp**:这可能是一个示例图像文件,用于测试Graph Cut算法。`bmp`是常见的位图图像格式,通常用于存储未经压缩的...
"Seg.zip_Graph Cut image_In the Cut_graph cut_graph cut code_grap" 这个压缩包包含了一个关于使用图割(Graph Cut)算法进行图像分割的项目。图割是一种优化方法,常用于计算机视觉和图像分析,它将图像像素之间...
Code Composer Studio (CCS) 是一款广泛应用于TI处理器的集成开发环境(IDE),它提供了强大的调试功能,包括使用CCS Graph来观察变量的变化趋势。本文将以直观且具体的方式介绍如何使用CCS Graph观察变量的方法,帮助...
- **关键文件**:"GraphSLAM_tutorials_code修改版"和原始的"GraphSLAM_tutorials_code"文件夹,可能包含了解决编译问题的修改,这为初学者提供了参考。 4. **编译与运行** - **依赖库**:编译g2o和GraphSLAM_...
TI公司的Code Composer Studio (CCS) 是一个强大的集成开发环境,特别针对TI的数字信号处理器(DSP)设计。CCS 5.5版本引入了Graph功能,为开发者提供了图形化的数据观察和分析工具,这对于理解和优化代码性能至关重要...
graph cut segmentation method.
characterizing transport in DFNs, by combining graph theoretical and ma- chine learning methods. We consider a graph representation where nodes sig- nify fractures and edges denote their intersections...
CCS(Code Composer Studio)是一款由Texas Instruments(TI)开发的强大集成开发环境(IDE),主要用于TI的数字信号处理器(DSP)和其他微控制器的软件开发。其中,Graph功能是CCS提供的一项非常重要的可视化工具,可以帮助...
"ds1820 graph vb code" 提示我们,这个项目可能涉及到通过VB编程读取并显示ds1820温度传感器的数据,并且这部分数据被图形化展示。"vb 界面"则意味着此项目着重于创建用户界面,以提供友好的交互体验。 【描述】中...
All charts are completly customizable and can be set up quickly either from code or from the unity editor. Graph And Chart can be used with any platform including VR/AR, mobile ,web and desktop. All ...
在CCS(Code Composer Studio)3.3版本中,提供了强大的图形显示功能,能够帮助开发者直观地查看和分析信号处理的结果。这些图形功能覆盖了多种类型的数据可视化,如时频分析、星座图、眼图以及图像显示等。本文将详细...
本资料“Graph_Fusion_Code_Data.zip”主要聚焦于一种创新的图像检索策略——全局特征与局部特征的融合,以此提升检索的准确性和鲁棒性。 全局特征通常是从整个图像中提取的、能够概括图像主要内容的信息。例如,...
Code2Graph:将源代码转换为图形。 通过对嵌套层次结构,控制和数据流的轻量级静态分析。 对于软件和语言工程中的各种下游任务: 软件架构分析 语义代码差异 语义代码合并 对代码更改的影响分析 不同粒度下的协同...
graph_algo_pesudo_code.txt.bak
Completely customizable from the editor and does not require even one line of code. Can be used within any platform including VR/AR. Bar Chart , Pie Chart , Torus Chart , Graph Chart , Bubble Chart ...