码迷,mamicode.com
首页 > 其他好文 > 详细

算法7-8:有向图接口

时间:2014-06-22 13:57:37      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:算法   图论   有向图   

有向图和无向图在编程中的表示方法是差不多的,本问介绍邻接表表示方法。


有向图对象的代码轮廓如下:


public class Digraph {
    public Digraph(int v) {
    }
 
    // 创建v到w的边
    public void addEdge(int v, int w) {
    }
 
    // 获取v能直接到达的顶点
    public Iterable<Integer> adj(int v){
    }
 
    // 获取整张图的顶点数量
    public int V() {
    }
 
    // 获取整张图的边数
    public int E() {
    }
 
    // 将整整图的方向反转
    public Digraph reverse() {
    }
 
    @Override
    public String toString() {
    }
}


代码


这次用邻接表方法进行实现,代码和无向图是差不多的。

import java.util.LinkedList;
import java.util.List;
 
public class Digraph {
    private List<Integer>[] adj;
    private int v;
 
    public Digraph(int v) {
        adj = (List<Integer>[]) new LinkedList[v];
        this.v = v;
    }
 
    // 创建v到w的边
    public void addEdge(int v, int w) {
        adj[v].add(w);
    }
 
    // 获取v能直接到达的顶点
    public Iterable<Integer> adj(int v) {
        return adj[v];
    }
 
    // 获取整张图的顶点数量
    public int V() {
        return v;
    }
 
    // 获取整张图的边数
    public int E() {
        int result = 0;
        for (List<Integer> e : adj) {
            result += e.size();
        }
        return result;
    }
 
    // 将整整图的方向反转
    public Digraph reverse() {
        Digraph G = new Digraph(this.v);
        for (int v = 0; v < this.v; v++) {
            for (int w : adj(v)) {
                G.addEdge(w, v);
            }
        }
        return G;
    }
 
    @Override
    public String toString() {
        String result = "";
        for (int v = 0; v < this.v; v++) {
            result += v + ":";
            for (int w : adj(v)) {
                result += " " + w;
            }
            result += "\n";
        }
        return result;
    }
}


算法7-8:有向图接口,布布扣,bubuko.com

算法7-8:有向图接口

标签:算法   图论   有向图   

原文地址:http://blog.csdn.net/caipeichao2/article/details/32157577

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!