第四章测试
1.以下说法,错误的是( )。
A:无向图是一个包含顶点和无向边的图结构 B:其他选项均不正确 C:加权无向图是一个包含顶点和加权有向边的图结构 D:有向图是一个包含顶点和有向边的图结构
答案:C
2.关于有向图的最短路径计算,正确的是( )。
A:拓扑排序算法不能处理存在回路的加权有向图 B:Bellman-Ford算法不能处理带有负权重回路的加权有向图 C:Dijkstra算法不能处理带有负权重的加权有向图 3.用于计算最短路径的Dijkstra和用于计算最小生成树的Prim算法是同一算法家族。( )
A:错 B:对 4.给定无向图的数据结构,进行插入和查找的操作,请根据要求填空。public class Graph {    private final int V;    private int E;private Bag<Integer>[] adj;}public class BreadthFirstPaths {    private static final int INFINITY = Integer.MAX_VALUE;    private boolean[] marked;  // marked[v] = is there an s-v path    private int[] edgeTo;      // edgeTo[v] = previous edge on shortest s-v path    private int[] distTo;      // distTo[v] = number of edges shortest s-v path     public BreadthFirstPaths(Graph G, int s) {        marked = new boolean[G.V()];        distTo = new int[G.V()];        edgeTo = new int[G.V()];        bfs(G, s);    }    // breadth-first search from a single source    private void bfs(Graph G, int s) {        Queue<Integer> q = new Queue<Integer>();        for (int v = 0; v < G.V(); v++)            distTo[v] = INFINITY;        distTo[s] = 0;        marked[s] = (    ?   );        q.enqueue(s);         while (!q.isEmpty()) {            int v = q.dequeue();            for (int w : G.adj(v)) {                if (!marked[w]) {                    edgeTo[w] = v;                    distTo[w] = distTo[v] + 1;                    marked[w] = true;                    q.enqueue(w);                }            }        }    }}
A:v B:false C:true D:null 5.给定如下的加权图的数据结构,完成最小生成树的延时prim方法的计算(prim方法)操作。public class Edge implements Comparable<Edge> {    private final int v;    private final int w;private final double weight;}public class EdgeWeightedGraph {    private final int V;    private int E;private Bag<Edge>[] adj;}public class LazyPrimMST {    private static final double FLOATING_POINT_EPSILON = 1E-12;     private double weight;       // total weight of MST    private Queue<Edge> mst;     // edges in the MST    private boolean[] marked;    // marked[v] = true iff v on tree    private MinPQ<Edge> pq;      // edges with one endpoint in tree     public LazyPrimMST(EdgeWeightedGraph G) {        mst = new Queue<Edge>();        pq = new MinPQ<Edge>();        marked = new boolean[G.V()];        for (int v = 0; v < G.V(); v++)     // run Prim from all vertices to            if (!marked[v]) prim(G, v);     // get a minimum spanning forest    }     // run Prim's algorithmprivate void prim(EdgeWeightedGraph G, int s) {   marked[s] = true;        for (Edge e : G.adj(s))            if (!marked[e.other(s)]) (    ?   );        while (!pq.isEmpty()) {                        // better to stop when mst has V-1 edges            Edge e = pq.delMin();                      // smallest edge on pq            int v = e.either(), w = e.other(v);        // two endpoints            if (marked[v] && marked[w]) continue;      // lazy, both v and w already scanned            mst.enqueue(e);                            // add e to MST            weight += e.weight();            if (!marked[v]) scan(G, v);               // v becomes part of tree            if (!marked[w]) scan(G, w);               // w becomes part of tree        }    }}
A:pq.insert(e) B:Pq.del(e) C:pq.insert(s) D:pq.delMin()

温馨提示支付 ¥3.00 元后可查看付费内容,请先翻页预览!
点赞(2) dxwkbang
返回
顶部