邻接表存储图,DFS遍历图的java代码实现
- 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;
- }
- //输出结果:注意:(邻接表的保存顺序与输入边的顺序有关)
邻接表存储图,DFS遍历图的java代码实现的更多相关文章
- 数据结构(11) -- 邻接表存储图的DFS和BFS
/////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...
- PTA 邻接表存储图的广度优先遍历(20 分)
6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...
- PTA 邻接表存储图的广度优先遍历
试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...
- 数据结构之---C语言实现图的邻接表存储表示
// 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...
- 图的邻接表存储表示(C)
//---------图的邻接表存储表示------- #include<stdio.h> #include<stdlib.h> #define MAX_VERTEXT_NUM ...
- 图的邻接表存储 c实现
图的邻接表存储 c实现 (转载) 用到的数据结构是 一个是顶点表,包括顶点和指向下一个邻接点的指针 一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针 刚开始的时候把顶点表初始化 ...
- c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。
/* 首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点 为起始点,进行深度优先.广度优先搜索遍历,并输出遍历的结果. */ #include <stdlib.h> #i ...
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...
- DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...
随机推荐
- jQuery选择器最佳实践--来自jQ官网
1.基于ID选择器进行查询,并且使用find方法. //快速 $("#container div.footer"); //超快 $("#container"). ...
- AFNetworking使用
1.访问网络获取Json //Get方法 NSString *str = @"http://api.xxx.cc/product/found.jhtml"; NSDictionar ...
- jboolean
bool为C中变量类型,jboolean 为JNI中变量类型,boolean为Java中变量类型:jboolean在C语言的定义为:typedef unsigned char jboolean;uns ...
- C#获取本机IP以及无线网ip
1 private void GetIP() 2 { 3 string hostName = Dns.GetHostName();//本机名 4 //System.Net.IPAddress ...
- 如何在Ubuntu上安装最新版本的Node.js
apt-get update apt-get install -y python-software-properties software-properties-common add-apt-repo ...
- BZOJ 3573 米特运输
语文题... 原来除了hash还可以取对数啊orz #include<iostream> #include<cstdio> #include<cstring> #i ...
- HDU 5303 Delicious Apples 美味苹果 (DP)
题意: 给一个长为L的环,起点在12点钟位置,其他位置上有一些苹果,每次带着一个能装k个苹果的篮子从起点出发去摘苹果,要将全部苹果运到起点需要走多少米? 思路: 无论哪处地方,只要苹果数超过k个,那么 ...
- HDU 5294 Tricks Device (最短路,最大流)
题意:给一个无向图(连通的),张在第n个点,吴在第1个点,‘吴’只能通过最短路才能到达‘张’,两个问题:(1)张最少毁掉多少条边后,吴不可到达张(2)吴在张毁掉最多多少条边后仍能到达张. 思路:注意是 ...
- Content-Type
HTTP Content-type .*( 二进制流,不知道下载文件类型) application/octet-stream .txt text/plain 没有csv这种类型
- 【C#学习笔记】打开新进程
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...