有向图的邻接矩阵

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();
        }
    }
}

时间: 2024-11-02 23:40:50

有向图的邻接矩阵的相关文章

邻接矩阵有向图(二)之 C++详解

本章是通过C++实现邻接矩阵有向图. 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法系列 目录 邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图. 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,<B,C>,<B,E>,<

邻接矩阵有向图(三)之 Java详解

前面分别介绍了邻接矩阵有向图的C和C++实现,本文通过Java实现邻接矩阵有向图. 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法系列 目录 邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图. 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,<

邻接矩阵有向图(一)之 C语言详解

本章介绍邻接矩阵有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现.实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若文章有错误或不足的地方,请不吝指出! 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结

poj 2778 AC自动机构建有向图 + 邻接矩阵快速幂

Problem: 给你m个病毒串,求指定长度n且不含病毒串作为子串的字符串一共有多少种. Analyse: 用AC自动机构建L个状态节点,每个节点的end标记记录是否在这里形成病毒串. 这里有个核心就是,如果当前后缀的子后缀(也就是它的fail指针指向的地方)是病毒串的话, 那么它就是病毒串. 然后根据这个AC自动机的L个节点来建立有向图的邻接矩阵B,B[i][j]代表从i到j状态的路径数量. B[0][j]代表的是从初始状态,还没有任何字符的时候转移到j状态,因为根节点0就是没有任何限制. 然

遍历以邻接矩阵存储的有向图

==主题:遍历以邻接矩阵存储的有向图== 给出如下的图: A / \B---C \ / D (这个图的边集={<A,B>,<A,C>,<B,C>,<B,D>,<C,B>,<C,D>,<D,C>},可以看出这是一张稠密图)将这张有向图转为邻接矩阵(出边)如下: A B C DA 0 9 2 XB X 0 6 3C X 7 0 1D X X 1 0(表中的X表示正无穷)有向图的邻接矩阵每行存储的是该行所代表的顶点直连的顶点有哪

图的存储-邻接矩阵

分不清自己这是预习,还是复习了 BFS和DFS总算要开始了 先复习一下图 所谓邻接矩阵(Adjacency Matrix)的存储结构,就是用一维数组存储图中顶点的信息,用矩阵表示图中各顶点之间的邻接关系.假设图G=(V,E)有n 个确定的顶点,即V={v0,v1,-,vn-1},则表示G 中各顶点相邻关系为一个n×n 的矩阵,矩阵的元素为: 其中,wij 表示边(vi,vj)或<vi,vj>上的权值:∞表示一个计算机允许的.大于所有边上权值的数. 用邻接矩阵表示法表示图如图8.7 所示. 用邻

存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现

如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值.常用的图的存储结构主要有以下二种: 邻接矩阵 邻接表 邻接矩阵 我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组

图的理解:存储结构与邻接矩阵

存储结构 要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值.常用的图的存储结构主要有以下二种: 邻接矩阵 邻接表 邻接矩阵 我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法. 我们假设A是这个二维数组,那么A中的一个元素aij不仅体现出了结点vi和结点vj的关系,而且aij的值正可以表示权值的大小. 以下是一个无向图的邻接矩阵表示示例: 从上图我们可

图的两种存储(邻接矩阵和邻接表)和两种遍历(DFS和BFS)

图的表示有很多,形式不固定,我暂时先记录我已经懂了的,能写的两种即大多数人应该都知道的邻接矩阵和邻接表. 邻接矩阵: 这里的邻接矩阵和离散数学说的有一点不同,至少有向图的邻接矩阵不同(离散书上的有向图的邻接矩阵求法到是有点像求任意两点的最短路径的Floyd算法) 以上都是(我现有知识认为的)废话: 重点 : G : 表示图: Nv:表示图的点数: Ne:表示图的边数: 邻接矩阵 即是一个 Nv * Nv 的矩阵,矩阵是用来储存  权值的(如果是带权图且有边的话),如果是无权图的的话,如果两顶点有