1.  
  1. import java.util.*;
  2.  
  3. public class Main{
  4. static int MAX_VERTEXNUM = 100;
  5. static int [] visited = new int[MAX_VERTEXNUM];
  6. public static void main(String [] args){
  7. Graph G = new Graph();
  8. creatGraph(G);
  9. output(G);
  10. for(int i=0;i<G.vertex_num;i++)
  11. visited[i]=0;
  12. System.out.println("DFS遍历的结果是:");
  13. dfs(G,0);//从G.node_list[0]开始DFS遍历
  14. }
  15. static void creatGraph(Graph G){
  16. Scanner in = new Scanner(System.in);
  17. System.out.println("请输入顶点数v和边数e,(v e):");
  18. G.vertex_num = in.nextInt();
  19. G.edge_num= in.nextInt();
  20. System.out.println("请输入各顶点信息:");
  21. for(int i=0;i<G.vertex_num;i++){
  22. G.node_list[i] = new VertexNode();
  23. G.node_list[i].date = in.next();
  24. G.node_list[i].first_edge = null; //很重要
  25. }
  26. System.out.println("请输入各边信息(以空格隔开):");
  27. for(int i=0;i<G.edge_num;i++){
  28. EdgeNode p = new EdgeNode();
  29. String str1 = in.next();
  30. String str2 = in.next();
  31. int v1 = locateVex(G,str1);
  32. int v2 = locateVex(G,str2);
  33. p.vertex = v1;
  34. p.next = G.node_list[v2].first_edge;
  35. G.node_list[v2].first_edge = p;
  36. EdgeNode q = new EdgeNode();//如果是有向图,则不存在下面的代码(上面的代码的存储顺序可能有变化)
  37. q.vertex = v2;
  38. q.next = G.node_list[v1].first_edge;
  39. G.node_list[v1].first_edge = q;
  40. }
  41. }
  42. static int locateVex(Graph G,String s){
  43. for(int i=0;i<G.vertex_num;i++){
  44. if(G.node_list[i].date.equals(s))
  45. return i;
  46. }
  47. return -1;
  48. }
  49. static void output(Graph G){
  50. System.out.println("输出邻接表存储情况:");
  51. EdgeNode p = new EdgeNode();
  52. for(int i=0;i<G.vertex_num;i++){
  53. System.out.print(G.node_list[i].date);
  54. p = G.node_list[i].first_edge;
  55. while(p!=null){
  56. System.out.print("->"+G.node_list[p.vertex].date);
  57. p = p.next;
  58. }
  59. System.out.println();
  60. }
  61. }
  62. static void dfs(Graph G,int k){
  63. System.out.println(G.node_list[k].date);
  64. visited[k]=1;
  65. EdgeNode p = new EdgeNode();
  66. p = G.node_list[k].first_edge;
  67. while(p!=null){
  68. if(visited[p.vertex]!=1)
  69. dfs(G,p.vertex);
  70. p = p.next;
  71. }
  72. }
  73. }
  74. //顶点存储
  75. class VertexNode{
  76. String date;
  77. EdgeNode first_edge = new EdgeNode();
  78.  
  79. }
  80. //边存储
  81. class EdgeNode{
  82. int vertex;
  83. EdgeNode next;
  84. }
  85. //图存储
  86. class Graph{
  87. VertexNode [] node_list = new VertexNode[100];
  88. int vertex_num,edge_num;
  89. }
  90.  
  91. //输出结果:注意:(邻接表的保存顺序与输入边的顺序有关)

邻接表存储图,DFS遍历图的java代码实现的更多相关文章

  1. 数据结构(11) -- 邻接表存储图的DFS和BFS

    /////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...

  2. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  3. PTA 邻接表存储图的广度优先遍历

    试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...

  4. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

  5. 图的邻接表存储表示(C)

    //---------图的邻接表存储表示------- #include<stdio.h> #include<stdlib.h> #define MAX_VERTEXT_NUM ...

  6. 图的邻接表存储 c实现

    图的邻接表存储 c实现 (转载) 用到的数据结构是 一个是顶点表,包括顶点和指向下一个邻接点的指针 一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针 刚开始的时候把顶点表初始化 ...

  7. c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。

    /* 首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点 为起始点,进行深度优先.广度优先搜索遍历,并输出遍历的结果. */ #include <stdlib.h> #i ...

  8. SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...

  9. DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储

    题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...

随机推荐

  1. jQuery选择器最佳实践--来自jQ官网

    1.基于ID选择器进行查询,并且使用find方法. //快速 $("#container div.footer"); //超快 $("#container"). ...

  2. AFNetworking使用

    1.访问网络获取Json //Get方法 NSString *str = @"http://api.xxx.cc/product/found.jhtml"; NSDictionar ...

  3. jboolean

    bool为C中变量类型,jboolean 为JNI中变量类型,boolean为Java中变量类型:jboolean在C语言的定义为:typedef unsigned char jboolean;uns ...

  4. C#获取本机IP以及无线网ip

       1 private void GetIP()   2 { 3 string hostName = Dns.GetHostName();//本机名 4 //System.Net.IPAddress ...

  5. 如何在Ubuntu上安装最新版本的Node.js

    apt-get update apt-get install -y python-software-properties software-properties-common add-apt-repo ...

  6. BZOJ 3573 米特运输

    语文题... 原来除了hash还可以取对数啊orz #include<iostream> #include<cstdio> #include<cstring> #i ...

  7. HDU 5303 Delicious Apples 美味苹果 (DP)

    题意: 给一个长为L的环,起点在12点钟位置,其他位置上有一些苹果,每次带着一个能装k个苹果的篮子从起点出发去摘苹果,要将全部苹果运到起点需要走多少米? 思路: 无论哪处地方,只要苹果数超过k个,那么 ...

  8. HDU 5294 Tricks Device (最短路,最大流)

    题意:给一个无向图(连通的),张在第n个点,吴在第1个点,‘吴’只能通过最短路才能到达‘张’,两个问题:(1)张最少毁掉多少条边后,吴不可到达张(2)吴在张毁掉最多多少条边后仍能到达张. 思路:注意是 ...

  9. Content-Type

    HTTP Content-type .*( 二进制流,不知道下载文件类型) application/octet-stream .txt text/plain 没有csv这种类型

  10. 【C#学习笔记】打开新进程

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...