`
m635674608
  • 浏览: 5043591 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java数据结构--图

    博客分类:
  • java
 
阅读更多

1.    建立图的顶点

 

[java] view plain copy
  1. package com.jzm.Graph;  
  2.   
  3. public class GraphNode {  
  4.     public GraphNode   link;  
  5.     public int   info;  
  6. }  

 

 

 

2.  建立图的前驱和后继点

 

[java] view plain copy
  1. package com.jzm.Graph;  
  2.   
  3. public class GraphList {  
  4.     public GraphNode first;  
  5.     public GraphNode last;  
  6.     public boolean   visitable;  
  7.     public int getAjd(int[] ajd) {  
  8.         GraphNode current = first;  
  9.         int length = 0;  
  10.         while(current != null) {  
  11.             ajd[length++] = current.info;  
  12.             current = current.link;  
  13.         }  
  14.         return length;  
  15.     }  
  16.     public void addNode(int v) {  
  17.         GraphNode node = new GraphNode();  
  18.         node.info = v;  
  19.         if(first == null) {  
  20.             first = node;  
  21.             last = node;  
  22.         } else {  
  23.             last.link = node;  
  24.             last = node;  
  25.         }  
  26.     }  
  27. }  

 


3. 写一个队列

 

[java] view plain copy
  1. package com.jzm.Graph;  
  2.   
  3. public class Queue {  
  4.     public GraphNode first;  
  5.     public GraphNode last;  
  6.     public int count;  
  7.     public void addQueue(int info) {  
  8.         GraphNode node = new GraphNode();  
  9.         node.info = info;  
  10.         if(first == null) {  
  11.             first = node;  
  12.             last = node;  
  13.         } else {  
  14.             last.link = node;  
  15.             last = last.link;  
  16.         }  
  17.         count++;  
  18.     }   
  19.       
  20.     public void deleteQueue() {  
  21.         if(first == null) {  
  22.             System.out.println("null queue");  
  23.         } else {  
  24.             first = first.link;  
  25.             count--;  
  26.         }  
  27.     }  
  28.       
  29.     public boolean isEmpty() {  
  30.         return count == 0;  
  31.     }  
  32.       
  33.     public int front() {  
  34.         if(first == null) {  
  35.             return -1;  
  36.         }  
  37.         return first.info;  
  38.     }  
  39.       
  40.     public int back() {  
  41.         if(last == null) {  
  42.             return -1;  
  43.         }  
  44.         return last.info;  
  45.     }  
  46. }  

 

 

 

4.   建立图

 

[java] view plain copy
  1. package com.jzm.Graph;  
  2.   
  3. public class Graph {  
  4.     private int length;  
  5.     private GraphList[] list;  
  6.     private int[][]     weight;  
  7.       
  8.     public Graph(int length) {  
  9.         this.length = length;  
  10.         list = new  GraphList[length];  
  11.         weight = new int[length][length];  
  12.     }  
  13.   
  14.       
  15.     public void   dfs(int v) {  
  16.         int[] ajd = new int[length];  
  17.         int ajdlength = list[v].getAjd(ajd);  
  18.         list[v].visitable = true;  
  19.         System.out.print(v + " ");  
  20.         for (int i = 0; i < ajdlength; i++) {  
  21.             int w = ajd[i];  
  22.             if (!list[w].visitable) {  
  23.                 dfs(w);  
  24.             }  
  25.         }  
  26.     }  
  27.   
  28.       
  29.       
  30.     // 深度优先遍历  
  31.     public void dfsTravel() {  
  32.         for (int i = 0; i < length; i++) {  
  33.             list[i].visitable = false;  
  34.         }  
  35.         for (int i = 0; i < length; i++) {  
  36.             if (!list[i].visitable) {  
  37.                 dfs(i);  
  38.             }  
  39.         }  
  40.     }  
  41.   
  42.     // 广度优先遍历  
  43.     public void bfsTravel() {  
  44.         for (int i = 0; i < length; i++) {  
  45.             list[i].visitable = false;  
  46.         }  
  47.         bfs();  
  48.     }  
  49.   
  50. private void bfs() {  
  51.         Queue   queue =  new Queue();  
  52.         for (int index = 0; index < length; index++) {  
  53.             if (!list[index].visitable) {  
  54.                 queue.addQueue(index);  
  55.                 list[index].visitable = true;  
  56.                 System.out.print(index + " ");  
  57.                 while (!queue.isEmpty()) {  
  58.                     int temp = queue.front();  
  59.                     queue.deleteQueue();  
  60.                     int[] ajd = new int[length];  
  61.                     int ajdlength = list[temp].getAjd(ajd);  
  62.                     for (int i = 0; i < ajdlength; i++) {  
  63.                         int w = ajd[i];  
  64.                         if (!list[w].visitable) {  
  65.                             System.out.print(w + " ");  
  66.                             queue.addQueue(w);  
  67.                             list[w].visitable = true;  
  68.                         }  
  69.                     }  
  70.                 }  
  71.             }  
  72.   
  73.         }  
  74.     }  
  75.   
  76.     // 最短路径  
  77.     private int[] shortPath(int v) {  
  78.         int[] shortPath = new int[length];  
  79.         boolean[]   weightFound = new boolean[length];  
  80.         for (int i = 0; i < length; i++) {  
  81.                                                 // 趋近无穷  
  82.             shortPath[i] =   9999;  
  83.             weightFound[i] = false;  
  84.         }  
  85.               
  86.         shortPath[v] = 0;  
  87.         weightFound[v] = true;  
  88.         Queue queue = new Queue();  
  89.         queue.addQueue(v);  
  90.           
  91.         while (!queue.isEmpty()) {  
  92.             int temp = queue.front();  
  93.             queue.deleteQueue();  
  94.             int[]  ajd = new int[length];  
  95.             int ajdlength =   list[temp].getAjd(ajd);  
  96.               
  97.               
  98.             for (int i = 0; i < ajdlength; i++) {  
  99.                 int w = ajd[i];  
  100.                 if (!weightFound[w]) {  
  101.                     if (shortPath[w] > shortPath[temp] + weight[temp][w]){  
  102.                         shortPath[w] = shortPath[temp] + weight[temp][w];  
  103.                     }  
  104.                 }  
  105.             }  
  106.               
  107.             int minWeightNode = 0;    
  108.             for (int i = 0; i < length; i++) {  
  109.                 if (!weightFound[i]) {  
  110.                     minWeightNode = i;  
  111.                     for (int j = 0; j < length; j++) {  
  112.                         if (!weightFound[j]) {  
  113.                             if (shortPath[j] < shortPath[minWeightNode]) {  
  114.                                 minWeightNode = j;  
  115.                             }  
  116.                         }  
  117.                     }  
  118.                     break;  
  119.                 }  
  120.             }  
  121.   
  122.             if (!weightFound[minWeightNode]) {  
  123.                 weightFound[minWeightNode] = true;  
  124.                 queue.addQueue(minWeightNode);  
  125.             }  
  126.         }  
  127.                   return shortPath;  
  128.     }  
  129.       
  130.     // 长度  
  131.     public int  length() {  
  132.         System.out.println("length="+length);  
  133.         return length;  
  134.     }  
  135.       
  136.       
  137.     public boolean isEmpty() {  
  138.         return  length == 0;  
  139.     }  
  140.   
  141.       
  142.     // 添加节点  
  143.     public void addGraph(int info) {  
  144.         for (int i = 0; i < length; i++) {  
  145.             if (list[i] == null) {  
  146.                 GraphList g = new GraphList();  
  147.                 g.addNode(info);  
  148.                 list[i] = g;  
  149.                 break;  
  150.             }  
  151.         }  
  152.     }  
  153.   
  154.       
  155.     // 添加边  
  156.     public void addEdge(int vfrom, int vto, int value) {  
  157.         list[vfrom].addNode(vto);  
  158.         weight[vfrom][vto] = value;  
  159.     }  
  160.   
  161.     // 打印图  
  162.     public void print() {  
  163.         for (int i = 0; i < length; i++) {  
  164.             GraphNode current =  list[i].first;  
  165.             while (current != null) {  
  166.                 System.out.print(current.info + " ");  
  167.                 current = current.link;  
  168.             }  
  169.                System.out.println("");  
  170.         }  
  171.     }  
  172.   
  173.   
  174. public static void main(String[] args) {  
  175.         Graph graph = new Graph(5);    
  176.         System.out.println("create graph start");  
  177.         for (int i = 0; i < 5; i++) {  
  178.               graph.addGraph(i);  
  179.         }  
  180.         graph.addEdge(0116);  
  181.         graph.addEdge(032);  
  182.         graph.addEdge(043);  
  183.         graph.addEdge(347);  
  184.         graph.addEdge(3112);  
  185.         graph.addEdge(4110);  
  186.         graph.addEdge(435);  
  187.         graph.addEdge(424);  
  188.         graph.addEdge(213);  
  189.         graph.addEdge(125);  
  190.         graph.print();  
  191.         System.out.println("create graph end");   
  192.           
  193.           
  194.         int[] shortPath =  graph.shortPath(0);  
  195.         for (int i = 0; i < shortPath.length; i++) {  
  196.              System.out.print(shortPath[i] + " ");  
  197.         }  
  198.     }  
  199. }  

 

http://blog.csdn.net/love_ubuntu/article/details/6689898

分享到:
评论

相关推荐

    java版数据结构-树结构

    java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;

    图解数据结构--使用Java

    全书内容浅显易懂,利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入...

    Java数据结构 -算法的效率

    非常不错哦,看了很有收获的,Java数据结构 -算法的效率

    java数据结构--学习

    本学习资料包"java数据结构--学习"聚焦于如何在Java环境下理解和应用各种数据结构,旨在提升开发者的技术水平,使其能够编写出更加高效和优化的代码。 1. **数组**:数组是最基本的数据结构,用于存储同类型元素的...

    JAVA数据结构-JAVA基础知识

    ### JAVA数据结构与基础知识详解 #### 一、Java与面向对象程序设计 Java是一种广泛使用的高级编程语言,其核心特点之一就是支持面向对象编程(OOP)。面向对象编程通过将数据和行为封装在对象中来简化软件开发和...

    JAVA核心知识点整理.rar

    Java数据结构--&gt;框架--&gt;Java中间件,缓存JAVA核心知识点整理--》从Java基础--&gt;Java数据结构--&gt;框架--&gt;Java中间件,缓存JAVA核心知识点整理--》从Java基础--&gt;Java数据结构--&gt;框架--&gt;Java...

    java数字统计-使用java数据结构

    将一串字符串中的单词统计出现次数并排序-使用java常用数据结构

    mysql-connector-java-5.1.27-bin.jar.zip

    Hive是一款基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,适合处理和管理大规模数据。在Hive中,如果需要将数据存储在MySQL这样的关系型数据库中,或者从MySQL导入...

    数据结构-基于Java的算法和数据结构源码.zip

    数据结构-基于Java的算法和数据结构源码.zip数据结构-基于Java的算法和数据结构源码.zip数据结构-基于Java的算法和数据结构源码.zip

    java数据结构与算法.pdf

    Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...

    数据结构-链表 JAVA语言实现

    数据结构-链表 JAVA语言实现,包含单向链表、双向链表、循环链表的遍历、删除和插入 详细介绍:http://blog.csdn.net/z740852294/article/details/77369439

    mysql-connector-java-5.1.10-bin.jar包下载

    它允许用户将大规模数据导入到Hadoop的HDFS,或者从Hadoop导出数据到结构化数据库。在与MySQL交互时,由于Hadoop生态系统主要由Java构建,因此需要一个JDBC驱动来连接MySQL。这就是`mysql-connector-java-5.1.10-bin...

    java数据结构和算法--第二版

    java数据结构和算法--第二版

    java---数据结构

    在IT领域,尤其是在编程世界,数据结构是至关重要的一个概念,尤其对于Java开发者而言。数据结构是组织、管理和存储数据的方式,它允许我们高效地访问和修改数据。本资源包"java---数据结构"显然是针对Java程序员...

    软件工程-数据结构-java-asp.net-网络各类面试题

    IT各类面试题目,包括软件工程-数据结构-java-asp.net-网络

    Java数据结构和算法

    Java数据结构和算法 Java数据结构和算法 Java数据结构和算法 Java数据结构和算法 Java数据结构和算法 Java数据结构和算法 Java数据结构和算法 Java数据结构和算法

    Java-GUI-课程实习-校园导航系统

    Java-GUI-可视化-数据结构-图的知识以及迪杰斯特拉算法 链接:...

    java-data-struct.rar_数据结构 java_数据结构源码

    8. **图(Graph)**:图是由节点和边组成的非线性数据结构,Java中通常通过邻接矩阵或邻接表来实现。 9. **堆(Heap)**:Java.util.PriorityQueue类实现了一个最小堆,可以用于优先级队列的操作。 10. **散列表...

Global site tag (gtag.js) - Google Analytics