图的遍历和创建

import java.util.Scanner;

/*
 * 图的遍历和创建
 */
public class GraphMatrixCS {

    static Scanner input =new Scanner(System.in);
    //创建邻接矩阵图
    static void CreateGraph(GraphMatrix GM){
        int i,j,k;
        int weight;//权
        char EstartV,EendV;//边的起始顶点
        System.out.println("输入图中各顶点的信息");
        for(i=0;i<GM.VertexNum;i++){
            System.out.printf("第%d个顶点:",i+1);
            GM.Vertex[i]=(input.next().toCharArray())[0];
            
        }
        System.out.println("输入构成各边的顶点及权值");
        for(k=0;k<GM.EdgeNum;k++){
            System.out.printf("第%d条边",k+1);
            EstartV=input.next().charAt(0);
            EendV=input.next().charAt(0);
            weight=input.nextInt();
            for(i=0;EstartV!=GM.Vertex[i];i++);//在已有的顶点中查找开始点
            for(j=0;EendV!=GM.Vertex[j];j++);//在已有的顶点中开始查找终结点
            GM.EdgeWeight[i][j]=weight;//对应位置保存权值,表示有一条边
            if(GM.GType==0){//若是无向图
                GM.EdgeWeight[j][i]=weight;//在对角位置保存权值
            }
        }
    }
    //清空矩阵
    static void ClearGraph(GraphMatrix gm){
        for(int i=0;i<gm.VertexNum;i++){
            for(int j=0;j<gm.VertexNum;j++){
                gm.EdgeWeight[i][j]=GraphMatrix.MaxValue;
            }
        }
    }
    //输出邻接矩阵
    static void OutGraph(GraphMatrix gm){
        for(int i=0;i<gm.VertexNum;i++){
            System.out.print(gm.Vertex[i]+" ");
        }
        System.out.println();
        for(int i=0;i<gm.VertexNum;i++){
            for(int j=0;j<gm.VertexNum;j++){
                if(gm.EdgeWeight[i][j]==GraphMatrix.MaxValue){
                    System.out.print(" Z");
                }else{
                    System.out.print(" "+gm.EdgeWeight[i][j]);
                }
            }
            System.out.println();
        }
    }
    //深度遍历某个结点
    static void DeepTraOne(GraphMatrix gm,int n){
        int i;
        gm.isTrav[n]=1;
        System.out.println(gm.Vertex[n]);
        for(i=0;i<gm.VertexNum;i++){
            if(gm.EdgeWeight[n][i]!=GraphMatrix.MaxValue && gm.isTrav[n]==0){
                DeepTraOne(gm,i);
            }
        }
    }
    //深度遍历
    static void DeepTraGraph(GraphMatrix gm){
        int i;
        for(i=0;i<gm.VertexNum;i++){
            gm.isTrav[i]=0;
        }
        System.out.println("深度优先遍历结点");
        for(i=0;i<gm.VertexNum;i++){
            if(gm.isTrav[i]==0){
                DeepTraOne(gm,i);
            }
        }
    }
    
}

class GraphMatrix{
    static final int MaxNum=20;
    static final int MaxValue=65535;
    char[] Vertex=new char[MaxNum];//保存顶点信息(序号或字母)
    int GType;//图的类型(0:无向图;1:有向图)
    int VertexNum;//顶点的数量
    int EdgeNum;//边的数量
    int[][] EdgeWeight=new int[MaxNum][MaxNum];//保存边的权
    int[] isTrav=new int[MaxNum];//遍历标志
}
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/smj20170417/article/details/70241530
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞