亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? algorithms in java, part 5 (graph algorithms) code.txt

?? Algorithms in Java, Part 5 (Graph Algorithms) code
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
        This file contains the code from "Algorithms in Java, Third Edition,        Part 5," by Robert Sedgewick, and is covered under the copyright        and warranty notices in that book. Permission is granted for this        code to be used for educational purposes in association with the text,        and for other uses not covered by copyright laws, provided that        the following notice is included with the code:                "This code is from "Algorithms in Java, Third Edition,"                by Robert Sedgewick, Addison-Wesley, 2003."        Commercial uses of this code require the explicit written        permission of the publisher. Send your request for permission,        stating clearly what code you would like to use, and in what        specific way, to: aw.cse@aw.com----------CHAPTER 17. Graph Properties and Types-----class Graph // ADT interface  { // implementations and private members hidden    Graph(int, boolean)    int V()    int E()    boolean directed()    int insert(Edge)    void remove(Edge)    boolean edge(int, int)    AdjList getAdjList(int)  }-----static Edge[] edges(Graph G)  { int E = 0;    Edge[] a = new Edge[G.E()];    for (int v = 0; v < G.V(); v++)       {        AdjList A = G.getAdjList(v);        for (int w = A.beg(); !A.end(); w = A.nxt())           if (G.directed() || v < w)            a[E++] = new Edge(v, w);      }    return a;  }  -----static void show(Graph G)  {     for (int s = 0; s < G.V(); s++)       {        Out.print(s + ": ");        AdjList A = G.getAdjList(s);        for (int t = A.beg(); !A.end(); t = A.nxt())           { Out.print(t + " "); }        Out.println("");      }  }-----class GraphIO  {    static void scanEZ(Graph)    static void scan(Graph)    static void show(Graph)  }-----class GraphCC  {     GraphCC(Graph G)    int count()    boolean connect(int, int)  }-----class DriverExample  {    public static void main(String[] args)      { int V = Integer.parseInt(args[0]);        Graph G = new Graph(V, false);        GraphIO.scanEZ(G);        if (V < 20) GraphIO.show(G);        Out.print(G.E() + " edges ");        GraphCC Gcc = new GraphCC(G);        Out.println(Gcc.count() + " components");       }  }-----class Graph  {     private int Vcnt, Ecnt;    private boolean digraph;    private boolean adj[][];    Graph(int V, boolean flag)      {        Vcnt = V; Ecnt = 0; digraph = flag;        adj = new boolean[V][V];      }    int V() { return Vcnt; }    int E() { return Ecnt; }    boolean directed() { return digraph; }    void insert(Edge e)      { int v = e.v, w = e.w;        if (adj[v][w] == false) Ecnt++;        adj[v][w] = true;        if (!digraph) adj[w][v] = true;       }     void remove(Edge e)      { int v = e.v, w = e.w;        if (adj[v][w] == true) Ecnt--;        adj[v][w] = false;        if (!digraph) adj[w][v] = false;       }     boolean edge(int v, int w)      { return adj[v][w]; }    AdjList getAdjList(int v)      // Program 17.8  }-----AdjList getAdjList(int v)  { return new AdjArray(v); }private class AdjArray implements AdjList  {     private int i, v;    AdjArray(int v)      { this.v = v; i = -1; }    public int beg()      { i = -1; return nxt(); }    public int nxt()      {        for (i++; i < V(); i++)          if (edge(v, i) == true) return i;        return -1;      }    public boolean end()      { return i >= V(); }  }-----class Graph // sparse multigraph implementation  {     private int Vcnt, Ecnt;    private boolean digraph;    private class Node      { int v; Node next;	Node(int x, Node t) { v = x; next = t; }      }    private Node adj[];    Graph(int V, boolean flag)      {        Vcnt = V; Ecnt = 0; digraph = flag;        adj = new Node[V];      }    int V() { return Vcnt; }    int E() { return Ecnt; }    boolean directed() { return digraph; }    void insert(Edge e)      { int v = e.v, w = e.w;        adj[v] = new Node(w, adj[v]);        if (!digraph) adj[w] = new Node(v, adj[w]);         Ecnt++;      }     AdjList getAdjList(int v)      // Program 17.10  }-----AdjList getAdjList(int v)  { return new AdjLinkedList(v); }private class AdjLinkedList implements AdjList  {     private int v;    private Node t;    AdjLinkedList(int v)      { this.v = v; t = null; }    public int beg()      { t = adj[v];         return t == null ? -1 : t.v; }    public int nxt()      { if (t != null) t = t.next;         return t == null ? -1 : t.v; }    public boolean end()      { return t == null; }  }-----class GraphDegree{  private Graph G;  private int[] deg;   GraphDegree(Graph G)    { this.G = G;       deg = new int[G.V()];      for (int v = 0; v < G.V(); v++)       {         deg[v] = 0;        AdjList A = G.getAdjList(v);        for (int w = A.beg(); !A.end(); w = A.nxt())           deg[v]++;       }    }  int degree(int v)    { return deg[v]; }}-----static void randE(Graph G, int E)  {     for (int i = 0; i < E; i++)      {        int v = (int) (G.V()*Math.random());        int w = (int) (G.V()*Math.random());        G.insert(new Edge(v, w));      }  }-----static void randG(Graph G, int E)  { double p = 2.0*E/G.V()/(G.V()-1);    for (int i = 0; i < G.V(); i++)      for (int j = 0; j < i; j++)        if (Math.random() < p)          G.insert(new Edge(i, j));  }-----static void scan(Graph G)  { int v, w;    ST st = new ST();    for (In.init(); !In.empty(); )      {         v = st.index(In.getString());        w = st.index(In.getString());        G.insert(new Edge(v, w));       }  }-----class ST
  {
    private final static int END = 0;
    private int N, val;
    private class Node
      { char c; int v; Node l, m, r; }
    private Node head;
    private Node indexR(Node h, char[] s, int i)
      { char ch = (i < s.length) ? s[i] : END;
        if (h == null) 
          { h = new Node(); h.c = ch; h.v = -1; }
        if (ch == END) 
          {
            if (h.v == -1) h.v = N++;
            val = h.v;
            return h;
          }
        if (s[i] < h.c) h.l = indexR(h.l, s, i);
        if (s[i] == h.c) h.m = indexR(h.m, s, i+1);
        if (s[i] > h.c) h.r = indexR(h.r, s, i);
        return h;
      }
    ST()
      { head = null; N = 0; }
    int index(String key)
      { char[] s = key.toCharArray();
        head = indexR(head, s, 0); return val; }
  }
-----class GraphPath{   private Graph G;  private boolean found;  private boolean[] visited;   private boolean searchR(int v, int w)    {       if (v == w) return true;      visited[v] = true;      AdjList A = G.getAdjList(v);      for (int t = A.beg(); !A.end(); t = A.nxt())         if (!visited[t])          if (searchR(t, w)) return true;      return false;    }  GraphPath(Graph G, int v, int w)      { this.G = G; found = false;      visited = new boolean[G.V()];      found = searchR(v, w);     }  boolean exists()    { return found; }}-----  private boolean searchR(int v, int w, int d)    {       if (v == w) return (d == 0);      visited[v] = true;      AdjList A = G.getAdjList(v);      for (int t = A.beg(); !A.end(); t = A.nxt())         if (!visited[t])          if (searchR(t, w, d-1)) return true;      visited[v] = false;      return false;    }-----class GraphPathE{   private Graph G;  private int v, w;  private boolean nopath;  void show()    // See Program 17.19  GraphPathE(Graph G, int v, int w)     { this.G = G;       GraphDegree Gdeg = new GraphDegree(G);      int t = Gdeg.degree(v) + Gdeg.degree(w);      if ((t % 2) != 0) { nopath = true; return; }      for (t = 0; t < G.V(); t++)        if ((t != v) && (t != w))          if ((Gdeg.degree(t) % 2) != 0)             { nopath = true; return; }      nopath = false;    }  boolean exists()    { return !nopath; }}-----private intStack S;private int tour(int v)  {     while (true)       { AdjList A = G.AdjList(v);        int w = A.beg(); if (A.end()) break;        S.push(v);        G.remove(new Edge(v, w));        v = w;      }    return v;  }void show()  {     S = new intStack(G.E());    if (nopath) return;    while (tour(v) == v && !S.empty())      { v = S.pop(); Out.print("-" + v); }    Out.println("");  }----------CHAPTER 18. Graph Search-----class GraphDFSc{ private Graph G;  private int cnt;  private int[] ord;   private void searchC(int v)    {       ord[v] = cnt++;      AdjList A = G.getAdjList(v);      for (int t = A.beg(); !A.end(); t = A.nxt())         if (ord[t] == -1) searchC(t);    }  GraphDFSc(Graph G, int v)      { this.G = G; cnt = 0;      ord = new int[G.V()];      for (int t = 0; t < G.V(); t++)        ord[t] = -1;      searchC(v);    }  int count() { return cnt; }  int order(int v) { return ord[v]; }}-----class GraphDFS{ private Graph G;  private int cnt;  private int[] ord, st;   private void searchC(Edge e)    { int w = e.w;       ord[w] = cnt++; st[e.w] = e.v;      AdjList A = G.getAdjList(w);      for (int t = A.beg(); !A.end(); t = A.nxt())         if (ord[t] == -1) searchC(new Edge(w, t));    }  GraphDFS(Graph G, int v)      { this.G = G; cnt = 0;      ord = new int[G.V()]; st = new int[G.V()];      for (int t = 0; t < G.V(); t++)        { ord[t] = -1; st[t] = -1; }      for (int t = 0; t < G.V(); t++)        if (ord[t] == -1) searchC(new Edge(t, t));     }  int order(int v) { return ord[v]; }  int ST(int v) { return st[v]; }}-----class GraphCC  { private Graph G;    private int ccnt;    private int[] id;     private void ccR(int w)      {         id[w] = ccnt;        AdjList A = G.getAdjList(w);        for (int v = A.beg(); !A.end(); v = A.nxt())           if (id[v] == -1) ccR(v);      }    GraphCC(Graph G)      { this.G = G; ccnt = 0;        id = new int[G.V()];        for (int v = 0; v < G.V(); v++) id[v] = -1;        for (int v = 0; v < G.V(); v++)          if (id[v] == -1) { ccR(v); ccnt++; }      }    int count() { return ccnt; }    boolean connect(int s, int t)       { return id[s] == id[t]; }  }-----  private void searchC(Edge e)    { int v = e.v, w = e.w;      ord[w] = cnt++;      Out.print("-" + w);      AdjList A = G.getAdjList(w);      for (int t = A.beg(); !A.end(); t = A.nxt())         if (ord[t] == -1) searchC(new Edge(w, t));        else if (ord[t] < ord[v])          Out.print("-" + t + "-" + w);      if (v == w) Out.println("");             else Out.print("-" + v);     }-----class GraphBiCC{ private Graph G;  private boolean OK;  private int[] vc;   private boolean dfsR(int v, int c)    {       vc[v] = (c+1) % 2;      AdjList A = G.getAdjList(v);      for (int t = A.beg(); !A.end(); t = A.nxt())         if (vc[t] == -1)           { if (!dfsR(t, vc[v])) return false; }         else if (vc[t] != c) return false;      return true;    }  GraphBiCC(Graph G)      { this.G = G; OK = true;      vc = new int[G.V()];      for (int t = 0; t < G.V(); t++) vc[t] = -1;      for (int v = 0; v < G.V(); v++)        if (vc[v] == -1)           if (!dfsR(v, 0)) { OK = false; return; }    }  boolean bipartite() { return OK; }  int color(int v) { return vc[v]; }}-----class GraphECC  { private Graph G;    private int cnt, bcnt;    private int[] low, ord;     private void searchC(Edge e)      { int w = e.w;        ord[w] = cnt++; low[w] = ord[w];        AdjList A = G.getAdjList(w);        for (int t = A.beg(); !A.end(); t = A.nxt())           if (ord[t] == -1)             {              searchC(new Edge(w, t));              if (low[w] > low[t]) low[w] = low[t];              if (low[t] == ord[t])                 bcnt++; // w-t is a bridge            }      else if (t != e.v)        if (low[w] > ord[t]) low[w] = ord[t];      }    GraphECC(Graph G)      { this.G = G; bcnt = 0; cnt = 0;        ord = new int[G.V()]; low = new int[G.V()];         for (int v = 0; v < G.V(); v++)          { ord[v] = -1; low[v] = -1; }        for (int v = 0; v < G.V(); v++)          if (ord[v] == -1) searchC(new Edge(v, v));       }    int count() { return bcnt+1; }  }-----class GraphBFSedge{   private Graph G;  private int cnt;  private int[] ord, st;   private void searchC(Edge e)  { EdgeQueue Q = new EdgeQueue(G.V());    Q.put(e);    while (!Q.empty())      if (ord[(e = Q.get()).w] == -1)       { int v = e.v, w = e.w;        ord[w] = cnt++; st[w] = v;                AdjList A = G.getAdjList(w);        for (int t = A.beg(); !A.end(); t = A.nxt())           if (ord[t] == -1) Q.put(new Edge(w, t));      }  }  GraphBFSedge(Graph G, int v)      { this.G = G; cnt = 0;      ord = new int[G.V()]; st = new int[G.V()];      for (int t = 0; t < G.V(); t++)        { ord[t] = -1; st[t] = -1; }      for (int t = 0; t < G.V(); t++)        if (ord[t] == -1) searchC(new Edge(t, t));     }  int order(int v) { return ord[v]; }  int ST(int v) { return st[v]; }}-----private void searchC(Edge e)  { EdgeQueue Q = new EdgeQueue(G.V());    Q.put(e); ord[e.w] = cnt++;     while (!Q.empty())      { e = Q.get(); int v = e.v, w = e.w;        st[w] = v;                AdjList A = G.getAdjList(w);        for (int t = A.beg(); !A.end(); t = A.nxt())           if (ord[t] == -1)           { Q.put(new Edge(w, t)); ord[t] = cnt++; }      }  }-----private void searchC(Edge e){ EdgeGQ Q = new EdgeGQ(G.V());  Q.put(e); ord[e.w] = cnt++;   while (!Q.empty())    { e = Q.get(); int v = e.v, w = e.w;      st[w] = v;              AdjList A = G.getAdjList(w);      for (int t = A.beg(); !A.end(); t = A.nxt()) 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产另类不卡| 中文字幕乱码久久午夜不卡| 日韩欧美国产综合一区| **欧美大码日韩| 麻豆精品视频在线观看| 99久久国产综合精品女不卡| 91精品国产入口| 亚洲免费观看高清完整版在线观看 | 国产毛片精品一区| 欧洲一区二区av| 亚洲国产精品99久久久久久久久| 午夜久久福利影院| 99久久国产综合精品色伊| 欧美精品一区二区三区在线 | 欧美精品一区二区久久婷婷| 一区二区三区不卡视频| 国产91丝袜在线观看| 日韩欧美在线不卡| 午夜一区二区三区视频| 在线视频综合导航| 亚洲日本护士毛茸茸| 国产成人精品一区二区三区网站观看| 欧美肥妇bbw| 亚洲线精品一区二区三区| 91在线无精精品入口| 国产偷国产偷精品高清尤物| 韩国理伦片一区二区三区在线播放| 欧美日韩一区成人| 亚洲国产精品影院| 欧美视频三区在线播放| 亚洲你懂的在线视频| a4yy欧美一区二区三区| 国产精品女主播av| av电影在线观看不卡| 国产精品久久久久婷婷| 成人黄色av网站在线| 国产精品视频观看| 91影视在线播放| 亚洲美女精品一区| 欧美偷拍一区二区| 五月婷婷激情综合| 日韩欧美在线网站| 精品在线观看免费| 中文字幕不卡的av| 色婷婷精品大在线视频| 一区二区三区国产精华| 欧美日本国产视频| 久久精品二区亚洲w码| 久久丝袜美腿综合| aa级大片欧美| 婷婷一区二区三区| 精品国产乱子伦一区| 国产成人午夜99999| 国产精品国产自产拍高清av王其 | 337p粉嫩大胆噜噜噜噜噜91av| 精品在线播放午夜| 国产精品水嫩水嫩| 欧美视频在线观看一区二区| 日本中文字幕一区| 亚洲国产毛片aaaaa无费看 | 亚洲综合免费观看高清完整版| 欧美日韩久久久一区| 麻豆一区二区三区| 国产精品嫩草99a| 欧美日本精品一区二区三区| 国产精品中文字幕日韩精品| 国产精品成人网| 欧美电影一区二区| 国产激情精品久久久第一区二区| 亚洲视频狠狠干| 欧美一区二区三区啪啪| 成人高清视频在线| 日韩国产精品大片| 国产精品视频你懂的| 在线综合视频播放| 99视频一区二区三区| 热久久久久久久| 国产精品麻豆99久久久久久| 欧美日韩一本到| 粉嫩嫩av羞羞动漫久久久| 亚洲成av人片在线观看无码| 国产日韩影视精品| 91精品免费观看| 91蜜桃传媒精品久久久一区二区| 激情综合网最新| 亚洲高清免费一级二级三级| 欧美国产日本视频| 精品久久久久久无| 欧美日韩精品系列| av不卡一区二区三区| 精品一区二区三区香蕉蜜桃| 亚洲一级二级在线| 中文字幕亚洲综合久久菠萝蜜| 欧美成人三级电影在线| 欧美视频一区二区三区在线观看| 成人av在线资源网站| 激情五月播播久久久精品| 美女精品自拍一二三四| 亚洲午夜三级在线| 亚洲伦在线观看| 国产精品久久久久久久第一福利 | 麻豆精品蜜桃视频网站| 樱花影视一区二区| 日韩伦理免费电影| 亚洲国产激情av| 久久久99免费| 精品国产制服丝袜高跟| 777久久久精品| 4438亚洲最大| 欧美二区三区91| 欧美日韩国产区一| 欧美日韩三级在线| 欧美网站大全在线观看| 日本韩国欧美一区二区三区| 成人激情图片网| 波多野结衣亚洲| aaa国产一区| 91小视频免费观看| 91免费在线看| 91国产精品成人| 欧美色图一区二区三区| 欧美影视一区二区三区| 色香色香欲天天天影视综合网| 一本大道久久精品懂色aⅴ| 99久久99久久精品免费看蜜桃| 97久久超碰国产精品电影| jlzzjlzz欧美大全| 色综合久久综合中文综合网| 日本高清免费不卡视频| 精品国产亚洲在线| 国产亚洲欧洲一区高清在线观看| 久久久久久久久久久黄色| 亚洲国产精品99久久久久久久久| 国产精品美女久久久久aⅴ国产馆| 国产精品久久久一本精品 | 2017欧美狠狠色| 久久久91精品国产一区二区三区| 国产精品福利在线播放| 一二三区精品视频| 日韩黄色片在线观看| 韩国精品主播一区二区在线观看 | 中文一区在线播放| 亚洲日本电影在线| 日韩成人精品在线观看| 九九热在线视频观看这里只有精品| 国产一区二区三区日韩| 91在线观看一区二区| 欧美人牲a欧美精品| 久久久久国产精品人| 亚洲视频一区二区在线观看| 亚洲成人动漫在线免费观看| 黄色成人免费在线| 97se亚洲国产综合自在线不卡 | 国产成人夜色高潮福利影视| 欧美亚洲国产一区在线观看网站| 日韩欧美一区二区三区在线| 欧美激情一区二区三区在线| 亚洲高清免费一级二级三级| 国产一区二区精品久久| 欧美网站大全在线观看| 国产日产欧美一区二区三区| 亚洲电影在线播放| 粉嫩av一区二区三区| 欧美疯狂性受xxxxx喷水图片| 欧美激情资源网| 青椒成人免费视频| 91农村精品一区二区在线| 精品国内二区三区| 午夜影院久久久| 99精品桃花视频在线观看| 日韩一区二区在线看片| 18欧美亚洲精品| 久久99精品久久只有精品| 欧美三日本三级三级在线播放| 国产午夜精品一区二区| 日韩电影在线免费看| 91日韩一区二区三区| 国产蜜臀av在线一区二区三区| 天天av天天翘天天综合网 | 国产一二精品视频| 欧美日韩高清在线播放| 亚洲日本在线看| 丰满放荡岳乱妇91ww| 久久综合色8888| 蜜臀av性久久久久av蜜臀妖精| 欧洲日韩一区二区三区| 亚洲欧洲美洲综合色网| 国产一区不卡在线| 26uuu国产日韩综合| 久久99国产精品久久| 欧美一卡二卡三卡| 免费在线观看精品| 欧美理论电影在线| 国产v综合v亚洲欧| 国产欧美一区二区精品忘忧草| 国产又黄又大久久| 久久夜色精品一区| 高清视频一区二区| 国产精品天天摸av网| 成a人片国产精品|