用邻接表实现的Graph(用于BFS最小路径)

本文介绍了一个简单的图数据结构实现方法,使用Java语言定义了顶点(Vertex)类,并通过顶点数组构建图。文章展示了如何初始化图,添加顶点及其连接关系,并提供了打印图的方法。
package com.Test.Graph;

import java.util.Scanner;

public class NewGraph {


    private int numVertex;
    private int numEdge;
    Vertex[] vertexList=new Vertex[100];

    public NewGraph(){
        intitalGraph();
        printGraph();
    }


    public class Vertex{
        int index;
        String name;
        Vertex nextVertex;
        Vertex preVertex;       //MinPathBFS专用
        boolean isVisited=false;        //访问过设置为true
        public Vertex(int index){
            this.index=index;
        }
        public Vertex(String name){
            this.name=name;
        }
    }

    public Vertex getVertex(String item) {
        for (int i=0;i<numVertex;i++){
            if (vertexList[i].name.equals(item))
                return vertexList[i];
        }
        return null;
    }

    public Integer getIndex(String item){
        for (int i=0;i<numVertex;i++){
            if (vertexList[i].name.equals(item))
                return i;
        }
        return null;
    }

    private void intitalGraph(){
        Scanner scanner=new Scanner(System.in);
        System.out.println("Please enter the Graph' num of Vertex and num of Edge: ");
        numVertex=scanner.nextInt();
        numEdge=scanner.nextInt();
        System.out.println("enter all vertex :");
        for (int i=0;i<numVertex;i++){
            vertexList[i]=new Vertex(scanner.next());
        }
        System.out.println("enter the the begining Vertex and it' following Vertex: ");
        for (int i=0;i<numEdge;i++){
            Vertex v1=getVertex(scanner.next());
            Vertex v2=new Vertex(getIndex(scanner.next()));
            v2.nextVertex=v1.nextVertex;
            v1.nextVertex=v2;
        }
    }

    public void printGraph(){
        for (int i=0;i<numVertex;i++){
            Vertex vertex=vertexList[i];
            System.out.print(vertex.name);
            while (vertex.nextVertex!=null){
                vertex=vertex.nextVertex;
                System.out.print(" -> "+vertexList[vertex.index].name);
            }
            System.out.println();
        }
    }

    public boolean hasVertex(String item){
        for (int i=0;i<numVertex;i++){
            if (vertexList[i].name.equals(item))
                return true;
        }
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值