import java.util.*;

public class Main{
static int MAX_VERTEXNUM = 100;
static int [] visited = new int[MAX_VERTEXNUM];
public static void main(String [] args){
Graph G = new Graph();
creatGraph(G);
output(G);
for(int i=0;i<G.vertex_num;i++)
visited[i]=0;
System.out.println("DFS遍历的结果是:");
dfs(G,0);//从G.node_list[0]开始DFS遍历
}
static void creatGraph(Graph G){
Scanner in = new Scanner(System.in);
System.out.println("请输入顶点数v和边数e,(v e):");
G.vertex_num = in.nextInt();
G.edge_num= in.nextInt();
System.out.println("请输入各顶点信息:");
for(int i=0;i<G.vertex_num;i++){
G.node_list[i] = new VertexNode();
G.node_list[i].date = in.next();
G.node_list[i].first_edge = null; //很重要
}
System.out.println("请输入各边信息(以空格隔开):");
for(int i=0;i<G.edge_num;i++){
EdgeNode p = new EdgeNode();
String str1 = in.next();
String str2 = in.next();
int v1 = locateVex(G,str1);
int v2 = locateVex(G,str2);
p.vertex = v1;
p.next = G.node_list[v2].first_edge;
G.node_list[v2].first_edge = p;
EdgeNode q = new EdgeNode();//如果是有向图,则不存在下面的代码(上面的代码的存储顺序可能有变化)
q.vertex = v2;
q.next = G.node_list[v1].first_edge;
G.node_list[v1].first_edge = q;
}
}
static int locateVex(Graph G,String s){
for(int i=0;i<G.vertex_num;i++){
if(G.node_list[i].date.equals(s))
return i;
}
return -1;
}
static void output(Graph G){
System.out.println("输出邻接表存储情况:");
EdgeNode p = new EdgeNode();
for(int i=0;i<G.vertex_num;i++){
System.out.print(G.node_list[i].date);
p = G.node_list[i].first_edge;
while(p!=null){
System.out.print("->"+G.node_list[p.vertex].date);
p = p.next;
}
System.out.println();
}
}
static void dfs(Graph G,int k){
System.out.println(G.node_list[k].date);
visited[k]=1;
EdgeNode p = new EdgeNode();
p = G.node_list[k].first_edge;
while(p!=null){
if(visited[p.vertex]!=1)
dfs(G,p.vertex);
p = p.next;
}
}
}
//顶点存储
class VertexNode{
String date;
EdgeNode first_edge = new EdgeNode(); }
//边存储
class EdgeNode{
int vertex;
EdgeNode next;
}
//图存储
class Graph{
VertexNode [] node_list = new VertexNode[100];
int vertex_num,edge_num;
} //输出结果:注意:(邻接表的保存顺序与输入边的顺序有关)

最新文章

  1. iOS-中app启动闪退的原因
  2. iOS对象属性详解
  3. iOS中真机连接电脑运行程序出现问题
  4. Java abstract
  5. &quot;大哥,割草机借我用一下,我修整一下草坪。&quot; ---- 谈谈this与JavaScript函数调用的不解之缘
  6. Java:基础
  7. mybatis和hibernate对比
  8. memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间
  9. Android 自定义控件 轻松实现360软件详情页
  10. python--装饰器(附偏函数、断言)
  11. Java里面使用Date.compareTo比较时间
  12. Vue.js用脚手架创建项目
  13. 高并发之限流RateLimiter(二)
  14. poj 3984 -- 迷宫问题 深搜
  15. centos:开启和关闭selinux
  16. 二、vue学习--父元素如何获取子元素的值,子元素如何获取父元素的值
  17. shadowshocks下载地址
  18. python_发送短信脚本
  19. Major Performance Impacts
  20. python学习笔记(三):文件操作和集合

热门文章

  1. Android AIDL-跨进程
  2. Objective-c CoreData
  3. (step4.3.4)hdu 1258(Sum It Up——DFS)
  4. jQuery Ajax通用js封装
  5. hdu 4612 Warm up(缩点+树上最长链)
  6. codeforces 334B - Eight Point Sets
  7. ti processor sdk linux am335x evm /bin/create-sdcard.sh hacking
  8. Java [Leetcode 101]Symmetric Tree
  9. LeetCode: Unique Paths I &amp; II &amp; Minimum Path Sum
  10. H.264码流结构解析