图 邻接矩阵 深度优先遍历 广度优先遍历

Eclipse java工程: 图的深度优先遍历、广度优先遍历
demo:http://download.csdn.net/detail/keen_zuxwang/9875848

import java.util.ArrayList;
import java.util.LinkedList;
/**
* @description 邻接矩阵模型类
*/
public class Graph {
private ArrayList vertexList;//存储点的链表
private int[][] edges;//邻接矩阵,用来存储边
private int numOfEdges;//边的数目
private int n;

public Graph(int n) {
    //初始化矩阵,一维数组,和边的数目
    this.n = n;
    edges=new int[n][n];
    vertexList=new ArrayList(n);
    numOfEdges=0;
}

//得到结点的个数
public int getNumOfVertex() {
    return vertexList.size();
}

//得到边的数目
public int getNumOfEdges() {
    return numOfEdges;
}

//返回结点i的数据
public Object getValueByIndex(int i) {
    return vertexList.get(i);
}

//返回v1,v2的权值
public int getWeight(int v1,int v2) {
    if((v1>=0 && v1=0 && v20) {
            return j;
        }
    }
    return -1;
}

//根据前一个邻接结点的下标来取得下一个邻接结点
public int getNextNeighbor(int v1,int v2) {
    for (int j=v2+1;j0) {
            return j;
        }
    }
    return -1;
}

public static void main(String args[]) {
    int n=4,e=4;//分别代表结点个数和边的数目
    int i = 0, j;
    int idx;
    String labels[]={"V0","V1","V2","V3"};//结点的标识
    Graph graph=new Graph(n);

    for(String label:labels) {
        graph.insertVertex(label);//插入结点
        System.out.print("结点"+i+", 标识"+label+"\n");
        i++;
    }
    System.out.print("\n");

    //插入四条边
    graph.insertEdge(0, 1, 2); //v0 v1 边
    graph.insertEdge(0, 2, 5); //v0 v2 边
    graph.insertEdge(0, 3, 1); //v0 v3 边
    graph.insertEdge(2, 3, 8); //v2 v3 边
    graph.insertEdge(3, 0, 7); //v3 v0 边

    System.out.println("结点个数是:"+graph.getNumOfVertex());
    System.out.println("边的个数是:"+graph.getNumOfEdges());

    System.out.print("\n");
    System.out.print("邻接矩阵 \n");
    for(i=0; i0){
        idx = graph.getNextNeighbor(0, idx);
        System.out.print("结点0: 第二个邻接点"+idx+", 权重"+graph.getWeight(0,idx));
        System.out.print("\n");
        if(idx>0){
            idx = graph.getNextNeighbor(0, idx);
            System.out.print("结点0: 第三个邻接点"+idx+", 权重"+graph.getWeight(0,idx));
            System.out.print("\n");

            if(idx>0){
                graph.deleteEdge(0, idx);//删除边
                System.out.print("删除边后, ");
                idx = graph.getNextNeighbor(0, idx);
                System.out.print("结点0: 第三个邻接点"+idx+", 权重"+graph.getWeight(0,idx)); // -1 表示没有
                System.out.print("\n");

                System.out.print("\n邻接矩阵\n");
                for(i=0; i

}

图 邻接矩阵 深度优先遍历 广度优先遍历_第1张图片

图 邻接矩阵 深度优先遍历 广度优先遍历_第2张图片

你可能感兴趣的:(数据结构)