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

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


    //邻接矩阵的无向图的创建
    public class MatrixUDG {

        private char[] mVexs;//顶点集合
        private int[][] mMatrix;//邻接矩阵
        
        //创建图,自己输入数据
        public MatrixUDG(){
            //输入顶点数和边数
            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){
                    System.out.println("error");
                    return;
                }
                mMatrix[p1][p2] = 1;
                mMatrix[p2][p1] = 1;
            }
        }
        
        //创建图,用已提供的矩阵
        public MatrixUDG(char[] vexs, char[][] edges){
            //初始化顶点数和边数
            int vlen = vexs.length;
            int elen = edges.length;
            //初始化顶点
            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);
                mMatrix[p1][p2] = 1;
                mMatrix[p2][p1] = 1;
            }
        }
        //从控制台读取一个整数
        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;
        }

        //获取顶点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();
            }
        }
        public static void main(String[] args) {
            char[] vexs = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
            char[][] edges = new char[][]{
                {'A', 'C'},
                {'A', 'D'},
                {'A', 'F'},
                {'B', 'C'},
                {'C', 'D'},
                {'E', 'G'},
                {'F', 'G'}};
            MatrixUDG pG;

            // 自定义"图"(输入矩阵队列)
            //pG = new MatrixUDG();
            // 采用已有的"图"
            pG = new MatrixUDG(vexs, edges);

            pG.print();   // 打印图
        }
    }

  • 相关阅读:
    android listview去掉分割线
    svn 上传 过滤
    PPPOE 模拟环境搭建
    Android笔记之网络-基本了解
    ios多线程操作(五)—— GCD串行队列与并发队列
    UVa 679
    android中更改spinner、AutoCompleteTextView切割线的颜色
    Cocos2d-x中触摸事件
    全然符合package.json在CommonJS中的规范
    Hibernate实体对象继承策略
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5221064.html
Copyright © 2011-2022 走看看