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

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

?? network2.h

?? 數據結構c++語言描述 Borland C++實現
?? H
字號:

#ifndef Network_
#define Network_

// includes transitive closure function for directed graphs
// should really be put into a class for functions intended
// only for directed graphs and not here

#include "lqueue.h"
#include "lstack.h"

class Network {
   public:
      virtual int Begin(int i) = 0;
      virtual int NextVertex(int i) = 0;
      virtual void InitializePos() = 0;
      virtual void DeactivatePos() = 0;
      virtual int Vertices() const = 0;
      virtual int Edges() const = 0;
      void BFS(int v, int reach[], int label);
      void DFS(int v, int reach[], int label);
      bool FindPath(int v, int w, int &length, int path[]);
      bool Topological(int v[]);
      void TransitiveClosure(int **TC);
   private:
      void dfs(int v, int reach[], int label);
      bool findPath(int v, int w, int &length,
                    int path[], int reach[]);
      void TCRow(int i, int v, int **TC, bool reach[]);
};

void Network::BFS(int v, int reach[], int label)
{// Breadth first search.
   LinkedQueue<int> Q;
   InitializePos(); // init graph iterator array
   reach[v] = label;
   Q.Add(v);
   while (!Q.IsEmpty()) {
      int w;
      Q.Delete(w);  // get a labeled vertex
      int u = Begin(w);
      while (u) {// visit adj vertices of w
         if (!reach[u]) {// an unreached vertex
            Q.Add(u);
            reach[u] = label;} // mark reached
         u = NextVertex(w); // next adj vertex of w
         }
      }
   DeactivatePos(); // free iterator array
}

void Network::DFS(int v, int reach[], int label)
{// Depth first search driver.
   InitializePos(); // init graph iterator array
   dfs(v, reach, label); // do the dfs
   DeactivatePos(); // free graph iterator array
}

void Network::dfs(int v, int reach[], int label)
{// Actual depth-first search code.
   reach[v] = label;
   int u = Begin(v);
   while (u) {// u is adj to v
      if (!reach[u]) dfs(u, reach, label);
      u = NextVertex(v);}
}

bool Network::FindPath
     (int v, int w, int &length, int path[])
{// Find a path from v to w, return length and path in
 // path[0:length].  Return false if there is no path.

   // first vertex in path is always v
   path[0] = v;
   length = 0;  // current path length
   if (v == w) return true;

   // initialize for recursive path finder
   int  n = Vertices();
   InitializePos();  // iterator
   int *reach = new int [n+1];
   for (int i = 1; i <= n; i++)
      reach[i] = 0;
   
   // search for path
   bool x = findPath(v, w, length, path, reach);

   DeactivatePos();
   delete [] reach;
   return x;
}

bool Network::findPath(int v, int w, int &length,
                   int path[], int reach[])
{// Actual path finder v != w.
 // Performs a depth-first search for a path to w.
   reach[v] = 1;
   int u = Begin(v);
   while (u) {
      if (!reach[u]) {
         length++;
         path[length] = u; // add u to path
         if (u == w) return true;
         if (findPath(u, w, length, path, reach))
            return true;
         // no path from u to w
         length--; // remove u
         }
      u = NextVertex(v);}
   return false;
}

bool Network::Topological(int v[])
{// Compute topological ordering of digraph vertices.
 // Return true if a topological order is found.
 // In this case return the order in v[0:n-1].
 // Return false if there is no topological order.

   int n = Vertices();
   
   // Compute in-degrees
   int *InDegree = new int [n+1];
   InitializePos(); // graph iterator array
   for (int i = 1; i <= n; i++) // initialize
      InDegree[i] = 0;
   for (int i = 1; i <= n; i++) {// edges out of i
      int u = Begin(i);
      while (u) {
         InDegree[u]++;
         u = NextVertex(i);}
      }
   
   // Stack vertices with zero in-degree
   LinkedStack<int> S;
   for (int i = 1; i <= n; i++)
      if (!InDegree[i]) S.Add(i);
   
   // Generate topological order
   int i = 0;  // cursor for array v
   while (!S.IsEmpty()) {// select from stack
      int w;             // next vertex
      S.Delete(w);
      v[i++] = w;
      int u = Begin(w);
      while (u) {// update in-degrees
         InDegree[u]--;
         if (!InDegree[u]) S.Add(u);
         u = NextVertex(w);}
      }
   
   DeactivatePos();
   delete [] InDegree;
   return (i == n);
}

void Network::TransitiveClosure(int **TC)
{// Compute the transitive closure of a directed graph.
 // Does not work correctly for undirected graphs.
 // Should use Undirected::TransitiveClosure for
 // such graphs.

   InitializePos(); // init graph iterator array
   int n = Vertices();
   bool *reach = new bool [n+1];

   // initialize TC
   for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
         TC[i][j] = 0;

   // compute TC row by row using depth first search
   for (int i = 1; i <= n; i++) {
      // initialize reach
      for (int j = 1; j <= n; j++)
         reach[j] = false;
      // set row i of TC
      TCRow(i,i,TC,reach);
   }

   DeactivatePos(); // free graph iterator array
}

void Network::TCRow(int i, int v, int **TC, bool reach[])
{// Use depth-first search to set row i of TC.
 // Start search at vertex v.
   reach[v] = true;
   int u = Begin(v);
   while (u) {// u is adj to v
      if (!reach[u]) {// set TC[i][u]
         TC[i][u] = 1;
         TCRow(i, u, TC, reach);}
      else // u is reachable from i
         // need next line to catch TC[i][i]
         TC[i][u] = 1;
      u = NextVertex(v);
      }
}

#endif;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线亚洲人成电影网站色www| 欧美精选在线播放| 欧美疯狂性受xxxxx喷水图片| 制服丝袜亚洲播放| 亚洲婷婷国产精品电影人久久| 琪琪久久久久日韩精品| 一本大道久久a久久精二百| 精品国产一区二区三区忘忧草 | 色天天综合久久久久综合片| 欧美电影免费观看完整版| 亚洲夂夂婷婷色拍ww47| 99视频精品免费视频| 精品国产三级a在线观看| 亚洲成人av福利| 日本久久一区二区三区| 国产精品丝袜久久久久久app| 久久99精品久久久久久| 9191久久久久久久久久久| 亚洲在线中文字幕| 日本道精品一区二区三区 | 波多野结衣精品在线| 精品粉嫩超白一线天av| 免费久久99精品国产| 欧美福利电影网| 免费在线看一区| 欧美一区二视频| 男男视频亚洲欧美| 精品动漫一区二区三区在线观看| 日韩电影免费在线观看网站| 9191国产精品| 精品一区二区国语对白| 精品国精品自拍自在线| 久久精品国产澳门| 久久欧美一区二区| 国产精品一卡二| 国产精品麻豆欧美日韩ww| 丰满岳乱妇一区二区三区| 国产精品色哟哟网站| 91在线观看成人| 亚洲综合视频在线| 欧美日韩性生活| 美女视频黄免费的久久| 亚洲精品一区二区三区99| 国产精品一区二区三区四区| 国产精品欧美久久久久一区二区 | 蜜臀av一区二区三区| 精品国产一区a| 丰满放荡岳乱妇91ww| 综合色中文字幕| 在线成人小视频| 精品午夜一区二区三区在线观看| 国产日韩av一区二区| 成人激情小说乱人伦| 尤物视频一区二区| 欧美一级高清片在线观看| 狠狠色综合播放一区二区| 精品国产自在久精品国产| 风间由美中文字幕在线看视频国产欧美| 国产精品久久午夜| 欧美日本免费一区二区三区| 麻豆精品一区二区av白丝在线| 国产欧美日韩一区二区三区在线观看| 不卡欧美aaaaa| 性久久久久久久久久久久| 亚洲国产高清不卡| 欧美日韩精品电影| 国模少妇一区二区三区| 亚洲欧美视频一区| 欧美电视剧免费全集观看| 成人免费黄色大片| 麻豆精品视频在线| 亚洲欧美国产毛片在线| 日韩精品一区二区三区老鸭窝| av中文字幕不卡| 开心九九激情九九欧美日韩精美视频电影| 欧美韩日一区二区三区| 欧美放荡的少妇| 91日韩一区二区三区| 久久成人免费电影| 亚洲综合av网| 国产精品另类一区| 久久综合久久综合亚洲| 欧美日韩亚洲不卡| 色婷婷激情综合| 国产一区二区在线观看视频| 亚洲国产人成综合网站| 国产精品区一区二区三| 精品国产精品网麻豆系列| 欧美日韩亚洲国产综合| 色综合久久久网| av资源网一区| 国产成人精品影院| 精品影院一区二区久久久| 亚洲成av人片在www色猫咪| 亚洲欧美一区二区在线观看| 久久久久久久久久电影| 日韩免费在线观看| 欧美一区二区三区在线视频| 欧美理论在线播放| 欧美在线视频不卡| 91精品91久久久中77777| 成人黄色电影在线| 成人久久久精品乱码一区二区三区| 久久精品国产99久久6| 美女mm1313爽爽久久久蜜臀| 日韩电影在线免费观看| 五月天欧美精品| 午夜精品福利一区二区蜜股av| 亚洲日本一区二区| 亚洲三级电影网站| 综合欧美亚洲日本| 依依成人综合视频| 夜色激情一区二区| 亚洲高清在线精品| 婷婷六月综合亚洲| 午夜精品福利一区二区蜜股av| 婷婷久久综合九色国产成人| 日韩一区精品字幕| 午夜成人免费视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 免费观看在线色综合| 国产最新精品精品你懂的| 国产成人精品一区二区三区四区 | 91小视频在线免费看| 色综合久久久久综合99| 欧美午夜片在线观看| 欧美一级艳片视频免费观看| 欧美videofree性高清杂交| 久久亚洲二区三区| 国产精品久久久久久久岛一牛影视 | 亚洲免费毛片网站| 亚洲最新视频在线播放| 石原莉奈在线亚洲二区| 国产米奇在线777精品观看| 成人污污视频在线观看| 不卡一区在线观看| 欧美中文字幕一区| 3atv一区二区三区| 精品久久久久一区二区国产| 国产精品美日韩| 亚洲第一会所有码转帖| 精品综合久久久久久8888| 成人久久久精品乱码一区二区三区| 日本乱人伦aⅴ精品| 欧美成人激情免费网| 中文字幕一区在线观看| 丝袜美腿亚洲综合| 成人免费不卡视频| 欧美一级国产精品| 亚洲毛片av在线| 九九国产精品视频| 91麻豆精品秘密| 欧美精品一区二区三区四区| 一区二区在线观看不卡| 精品一区二区免费在线观看| 91麻豆国产福利在线观看| 精品成人在线观看| 一区二区三区高清不卡| 国产在线国偷精品产拍免费yy | 国产精品久久毛片a| 婷婷中文字幕一区三区| 99久久婷婷国产综合精品| 欧美一级高清大全免费观看| 中文字幕亚洲综合久久菠萝蜜| 蜜臀久久99精品久久久画质超高清 | 欧洲视频一区二区| 在线播放91灌醉迷j高跟美女| 亚洲国产成人一区二区三区| 日韩电影免费在线| 色天天综合久久久久综合片| 久久久久久久一区| 免费在线观看不卡| 欧美日韩中文字幕精品| 国产精品你懂的在线欣赏| 激情综合色综合久久| 欧洲精品视频在线观看| 国产精品乱码妇女bbbb| 国产一区二区在线观看视频| 日韩亚洲欧美在线| 亚洲成人av一区二区三区| 91国产精品成人| 国产精品的网站| 国产成人av一区二区| 日韩三级免费观看| 日韩—二三区免费观看av| 欧美日韩一区高清| 国产一区欧美二区| 欧美视频你懂的| 中文字幕在线一区| 成人免费视频播放| 欧美激情在线观看视频免费| 精品一区二区三区影院在线午夜 | 99国产精品视频免费观看| 亚洲精品在线三区| 国产一区在线观看视频| 欧美xfplay| 国产乱人伦偷精品视频免下载| 精品不卡在线视频| 国产一区二区三区国产| 久久精品欧美日韩|