zoukankan      html  css  js  c++  java
  • 有向图的邻接矩阵

    import java.io.IOException;
    import java.util.Scanner;


    //有向图的邻接矩阵的创建
    public class MatrixDG {

        private char[] mVexs;//顶点集合
        private int[][] mMatrix;//邻接矩阵
        
        //创建图,自己输入数据
        public MatrixDG(){
            //输入顶点数和边数
            int vlen = readInt();
            int elen = readInt();
            
            if(vlen <1 || elen<1 || elen >(vlen*(vlen-1))){
                System.out.println("error");
                return ;
            }
            //初始化边数
            mVexs = new char[vlen];
            for(int i=0;i<vlen;i++){
                 mVexs[i] = readChar();
            }
            
            //初始化边
            mMatrix = new int[vlen][vlen];
            for(int i=0;i<elen;i++){
                char c1 = readChar();
                char c2 = readChar();
                int p1 = getPosition(c1);
                int p2 = getPosition(c2);
                if(p1 == -1 || p2 == -1)
                    return ;
                mMatrix[p1][p2] = 1;
            }
        }
        
        //创建图,根据已有的数据
        public MatrixDG(char[] vexs, char[][] edges){
            //得到顶点数和边数
            int vlen = vexs.length;
            int elen = edges.length;
            
            if(vlen <1 || elen<1 || elen >(vlen*(vlen-1))){
                System.out.println("error");
                return ;
            }
            //初始化顶点
            mVexs = new char[vlen];
            for(int i=0;i<vlen;i++){
                mVexs[i] = vexs[i];
            }
            //初始化边数
            mMatrix = new int[vlen][vlen];
            for(int i=0;i<elen;i++){
                char c1 = edges[i][0];
                char c2 = edges[i][1];
                int p1 = getPosition(c1);
                int p2 = getPosition(c2);
                if(p1 == -1 || p2 == -1)
                    return ;
                mMatrix[p1][p2] = 1;
            }
        }
        //从控制台得到int型数
        private int readInt(){
            Scanner scan = new Scanner(System.in);
            return scan.nextInt();
        }
        
        //从控制台得到一字符
        private char readChar(){
            char ch = '0';
            do{
                try {
                    ch = (char) System.in.read();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }while(!((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')));
            return ch;
        }

        //获取字符在数组中的位置
        private int getPosition(char ch){
            for(int i=0;i<mVexs.length;i++){
                if(mVexs[i] == ch)
                    return i;
            }
            return -1;
        }

        //打印邻接矩阵
        private void print(){
            for(int i=0;i<mVexs.length;i++){
                for(int j=0;j<mVexs.length;j++)
                    System.out.print(mMatrix[i][j] + " ");
                System.out.println();
            }
        }
    }

  • 相关阅读:
    数据库范式那些事[转]
    C# 之值类型与引用类型参数[基础]
    C# 实体类生成工具
    《浅谈线程池》笔记
    提高网站性能之 —— 减少图片HTTP 请求的方案
    SQL Server 2005 For XML[学习]
    关于数据类型导致的精确计算
    SQL Server 数据库实现之TSQL语句[备忘]
    C# 关键字ref 和out 的详细区别
    关于XML中的名称空间
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5221069.html
Copyright © 2011-2022 走看看