实现一个基本图

来源:互联网 发布:vi保存退出ubuntu 编辑:程序博客网 时间:2024/06/06 03:53

import java.util.LinkedList;

//稀疏图的顶点类
class Vertex {
LinkedList list;
}

class SparseGraph {
int v, e = 0;
private boolean directed;
private Vertex[] g;

public SparseGraph(int v, boolean directed) {    this.v = v;    this.directed = directed;    g = new Vertex[v];    for (int i = 0; i < v; i++) {        g[i] = new Vertex();        g[i].list = new LinkedList<Integer>();    }}public int E() {    return e;}public int V() {    return v;}public void addEdge(int v1, int v2) {    if (v1 < v && v2 < v && v1 >= 0 && v2 >= 0) {        g[v1].list.add(v2);        // v1 != v2自环边        if (v1 != v2 && !directed)            g[v2].list.add(v1);        e++;    }}public boolean hasEdge(int v1, int v2) {    if (v1 > v && v2 > v && v1 < 0 && v2 < 0)        return false;    for (int i = 0; i < g[v1].list.size(); i++)        if (g[v1].list.get(i) == v2)            return true;    return false;}public void print() {    for (int i = 0; i < g.length; i++) {        System.out.print(i+"->");        for (int j = 0; j < g[i].list.size(); j++) {            if (j == g[i].list.size() - 1)                System.out.print(g[i].list.get(j));            else                System.out.print(g[i].list.get(j)+"->");        }        System.out.println();    }}

}

public class DenseGraph {
private int v, e = 0;
private boolean directed;
private boolean[][] g;

public DenseGraph(int v, boolean directed) {    this.v = v;    this.directed = directed;    g = new boolean[v][v];    for (int i = 0; i < v; i++)        for (int j = 0; j < v; j++)            g[i][j] = false;}public static void main(String[] args) {    DenseGraph graph = new DenseGraph(10, false);    graph.addEdge(1, 2);    int vertex = graph.V();    int edge = graph.E();    boolean bool = graph.hasedge(1, 2);    boolean bool2 = graph.hasedge(2, 1);    System.out.println(vertex + "," + edge + "," + bool + "," + bool2);    graph.print();    SparseGraph graph2 = new SparseGraph(10, false);    graph2.addEdge(1, 2);    int edge2 = graph2.E();    int vertex2 = graph2.V();    boolean bool3 = graph2.hasEdge(1, 2);    boolean bool4 = graph2.hasEdge(2, 1);    System.out.println(vertex2 + "," + edge2 + "," + bool3 + "," + bool4);    graph2.print();}private void print() {    System.out.print("\t");    for (int i = 0; i < g.length; i++)        System.out.print(i + "\t");    System.out.println();    for (int i = 0; i < g.length; i++) {        System.out.print(i + "\t");        for (int j = 0; j < g.length; j++)            System.out.print(g[i][j]+"\t");        System.out.println();    }}private boolean hasedge(int v1, int v2) {    if (v1 > v && v2 > v && v1 < 0 && v2 < 0)        return false;    return g[v1][v2];}private void addEdge(int v1, int v2) {    if (v1 < v && v2 < v && v1 >= 0 && v2 >= 0) {        if (!hasedge(v1, v2)) {            e++;            g[v1][v2] = true;            if (!directed)                g[v2][v1] = true;        }    }}private int E() {    return e;}private int V() {    return v;}

}

原创粉丝点击