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

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

?? adjacencygraph.h

?? datastucutre and algorithms, application, in C
?? H
字號:
// adjacency matrix representation of an undirected graph

#ifndef adjacencyGraph_
#define adjacencyGraph_

#include <iostream>
#include <sstream>
#include <iterator>
#include "adjacencyWGraph.h"
#include "unweightedEdge.h"
#include "maxHeap.h"

using namespace std;

class adjacencyGraph : public adjacencyWGraph<bool>
{
   public:
      adjacencyGraph(int numberOfVertices = 0)
         : adjacencyWGraph<bool> (numberOfVertices, false) {}

      void insertEdge(edge<bool> *theEdge)
      {// Insert an edge.
         int v1 = theEdge->vertex1();
         int v2 = theEdge->vertex2();
         if (v1 < 1 || v2 < 1 || v1 > n || v2 > n || v1 == v2)
         {
            ostringstream s;
            s << "(" << v1 << "," << v2 
              << ") is not a permissible edge";
            throw illegalParameterValue(s.str());
         }
   
         if (!a[v1][v2])  // new edge
            e++;
         a[v1][v2] = true;
         a[v2][v1] = true;
      }

      bool weighted() const {return false;}

      int btMaxClique(int *maxClique)
      {// Solve max-clique problem using backtracking.
       // Set maxClique[] so that maxClique[i] = 1 iff i is in max clique.
       // Return size of max clique.
         // initialize for rClique
         currentClique = new int [n + 1];
         sizeOfCurrentClique = 0;
         sizeOfMaxCliqueSoFar = 0;
         maxCliqueSoFar = maxClique;
      
         // find max clique
         rClique(1);
         return sizeOfMaxCliqueSoFar;
      }

      // structs used by max-profit branch-and-bound max clique
      struct bbNode
      {
         // instance data members
         bbNode* parent;
         bool leftChild;    // true iff left child of parent
   
         // constructors
         bbNode() {}
   
         bbNode(bbNode* theParent, bool theLeftChild)
         {
            parent = theParent;
            leftChild = theLeftChild;
         }
      };
      
      struct heapNode
      {
         // data members
         bbNode* liveNode;
         int upperSize;     // upper bound on clique size in this subtree
         int cliqueSize;    // size of clique at this node
         int level;
   
         // constructors
         heapNode() {}
   
         heapNode(bbNode* theLiveNode, int theUpperSize,
                  int theCliqueSize, int theLevel)
         {
            liveNode = theLiveNode;
            upperSize = theUpperSize;
            cliqueSize = theCliqueSize;
            level = theLevel;
         }
   
         operator<(const heapNode right)
            {return upperSize < right.upperSize;}
   
         operator int() {return upperSize;}
      };

      int maxProfitBBMaxClique(int *maxClique)
      {// Max-profit branch-and-bound code to find a max clique.
       // maxClique[i] is set to 1 iff i is in max clique.
       // Return size of max clique.
         // initialize for level 1 start
         bbNode* eNode = NULL;
         int eNodeLevel = 1;
         int sizeOfCliqueAtENode = 0;
         int sizeOfMaxCliqueSoFar = 0;
      
         // search subset space tree
         while (eNodeLevel != n + 1)
         {// while not at leaf
            // see if vertex eNodeLevel is connected to all
            // vertices in the current clique
            bool connected = true;
            bbNode* currentNode = eNode;
            for (int j = eNodeLevel - 1; j > 0;
                 currentNode = currentNode->parent, j--)
               if (currentNode->leftChild && !a[eNodeLevel][j])
               {// j is in the clique but no edge between eNodeLevel and j
                  connected = false;
                  break;
                }
      
            if (connected)
            {// left child is feasible
               if (sizeOfCliqueAtENode + 1 > sizeOfMaxCliqueSoFar)
                  sizeOfMaxCliqueSoFar = sizeOfCliqueAtENode + 1;
               addLiveNode(sizeOfCliqueAtENode + n - eNodeLevel + 1,
                  sizeOfCliqueAtENode + 1, eNodeLevel + 1, eNode, true);
            }
   
            if (sizeOfCliqueAtENode + n - eNodeLevel >= sizeOfMaxCliqueSoFar)
               // right child has prospects
               addLiveNode(sizeOfCliqueAtENode + n - eNodeLevel,
                  sizeOfCliqueAtENode, eNodeLevel + 1, eNode, false);
      
            // get next E-node, heap cannot be empty
            heapNode nextENode = liveNodeMaxHeap.top();
            liveNodeMaxHeap.pop();
            eNode = nextENode.liveNode;
            sizeOfCliqueAtENode = nextENode.cliqueSize;
            eNodeLevel = nextENode.level;
         }
      
         // construct maxClique[] by following path from eNode to the root
         for (int j = n; j > 0; j--)
         {
            maxClique[j] = (eNode->leftChild) ? 1 : 0;
            eNode = eNode->parent;
         }
      
         return sizeOfMaxCliqueSoFar;
      }
      
   protected:
      // recursive backtracking code to compute largest clique
      void rClique(int currentLevel)
      {// search from a node at currentLevel
         if (currentLevel > n)
         {// at leaf, found a larger clique
          // update maxCliqueSoFar and sizeOfMaxCliqueSoFar
            for (int j = 1; j <= n; j++)
               maxCliqueSoFar[j] = currentClique[j];
            sizeOfMaxCliqueSoFar = sizeOfCurrentClique;
            return;
         }
      
         // not at leaf; see whether vertex currentLevel
         // is connected to others in current clique
         bool connected = true;
         for (int j = 1; j < currentLevel; j++)
            if (currentClique[j] == 1 && !a[currentLevel][j])
            {// vertex currentLevel not connected to j
               connected = false;
               break;
            }
      
         if (connected)
         {// try left subtree
            currentClique[currentLevel] = 1;  // add to clique
            sizeOfCurrentClique++;
            rClique(currentLevel + 1);
            sizeOfCurrentClique--;
         }
      
         if (sizeOfCurrentClique + n - currentLevel > sizeOfMaxCliqueSoFar)
         {// try right subtree
            currentClique[currentLevel] = 0;
            rClique(currentLevel + 1);
         }
      }

      // class data members used by backtracking max clique
      static int *currentClique;
      static int sizeOfCurrentClique;
      static int sizeOfMaxCliqueSoFar;
      static int *maxCliqueSoFar;

      // class data member used by max-profit branch-and-bound max clique
      static maxHeap<heapNode> liveNodeMaxHeap;
      
      void addLiveNode(int upperSize, int theSize, int theLevel,
                        bbNode* theParent, bool leftChild)
      {// Add a new live node to the max heap.
       // Also add the live node to the solution space tree.
       // theSize = size of clique at this live node.
       // theParent = parent of new node.
       // leftChild = true iff new node is left child of theParent.
         // create the new node of the solution space tree
         bbNode* b = new bbNode(theParent, leftChild);
   
         // insert corresponding node into max heap
         liveNodeMaxHeap.push(heapNode(b, upperSize, theSize, theLevel));
      }
};

int* adjacencyGraph::currentClique;
int adjacencyGraph::sizeOfCurrentClique;
int adjacencyGraph::sizeOfMaxCliqueSoFar;
int* adjacencyGraph::maxCliqueSoFar;
maxHeap<adjacencyGraph::heapNode> adjacencyGraph::liveNodeMaxHeap;

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩在线播放三区| 91在线看国产| 欧美a级理论片| 夜夜嗨av一区二区三区中文字幕| 亚洲国产成人一区二区三区| 国产女主播一区| 国产精品色婷婷| 综合在线观看色| 亚洲图片欧美综合| 免费人成黄页网站在线一区二区| 免费在线观看一区二区三区| 日韩国产欧美在线视频| 久久99精品久久久久久| 国产在线国偷精品产拍免费yy| 久久精品99久久久| 国产精品911| 色综合久久久久久久久久久| 欧美日韩在线电影| 久久久不卡影院| 亚洲美腿欧美偷拍| 青青草视频一区| 国产成人精品一区二| caoporn国产精品| 欧美美女黄视频| 欧美大片免费久久精品三p| 久久久国产精品午夜一区ai换脸| 亚洲三级理论片| 蜜臀久久久久久久| 成人午夜碰碰视频| 欧美一区二区三区爱爱| 一区在线播放视频| 日韩二区三区四区| 99热精品国产| 欧美一区二区三区小说| 国产精品免费观看视频| 日日骚欧美日韩| 丁香婷婷综合激情五月色| 欧美日韩在线播放| 国产精品视频一二三区| 日韩黄色免费网站| 99久久伊人久久99| 欧美精品一区二区三区一线天视频| 中文字幕亚洲视频| 国产一区欧美二区| 欧美一二三四在线| 亚洲男人的天堂网| 国产成人午夜高潮毛片| 宅男在线国产精品| 亚洲综合视频在线| 成人性生交大片免费| 欧美变态凌虐bdsm| 天天色综合天天| 日本丰满少妇一区二区三区| 国产亚洲欧美中文| 国内成+人亚洲+欧美+综合在线 | 精品国产乱码久久| 亚洲一区二区三区小说| 97久久超碰国产精品电影| 精品国产自在久精品国产| 亚洲成av人影院在线观看网| 99国内精品久久| 国产精品另类一区| 国产福利精品导航| 国产亚洲成年网址在线观看| 免费久久99精品国产| 欧美日韩精品欧美日韩精品一| 国产精品国产精品国产专区不蜜| 国产在线精品免费av| 日韩一区二区三区电影| 日韩国产欧美三级| 91麻豆精品国产| 毛片av中文字幕一区二区| 欧美日本免费一区二区三区| 一区二区三区欧美日| 91免费版pro下载短视频| 国产精品成人免费精品自在线观看| 国产精品99久久久久久久vr| 中文字幕不卡三区| 色婷婷精品久久二区二区蜜臂av | 最新国产成人在线观看| 91蝌蚪porny九色| 亚洲激情六月丁香| 91黄视频在线观看| 亚洲国产精品久久艾草纯爱| 欧美三级电影一区| 日韩激情av在线| 久久这里只有精品首页| 国产一区二区三区精品视频| 国产亚洲午夜高清国产拍精品| 粉嫩一区二区三区性色av| 日本一区二区不卡视频| 色老头久久综合| 天堂蜜桃一区二区三区| 久久午夜电影网| 成人免费av在线| 亚洲午夜日本在线观看| 日韩一区国产二区欧美三区| 国产精品白丝av| 一片黄亚洲嫩模| 欧美白人最猛性xxxxx69交| 国产九九视频一区二区三区| 日韩美女精品在线| 欧美电影在哪看比较好| 国产成人免费视频| 亚洲午夜电影在线| 久久久久久99久久久精品网站| 99久久国产综合色|国产精品| 午夜国产精品影院在线观看| 精品国产一区a| 91国偷自产一区二区使用方法| 日韩精彩视频在线观看| 中文字幕一区二区三区不卡 | 成人毛片视频在线观看| 亚洲一区视频在线观看视频| 精品久久人人做人人爰| 一道本成人在线| 国产精品99久久久久久宅男| 亚洲自拍与偷拍| 亚洲国产精品精华液2区45| 日韩亚洲欧美一区二区三区| 99久久er热在这里只有精品66| 日产精品久久久久久久性色| 国产精品国产三级国产普通话三级| 884aa四虎影成人精品一区| 成人精品在线视频观看| 久久精品99国产精品| 夜夜嗨av一区二区三区中文字幕| 久久久久国产精品麻豆| 91精品国产91热久久久做人人 | 久久久久久久国产精品影院| 欧美性生活影院| 91小宝寻花一区二区三区| 国内外精品视频| 久久精品国产一区二区三| 亚洲国产aⅴ天堂久久| 最新中文字幕一区二区三区| 久久精品视频在线看| 日韩一级二级三级| 91精品国产麻豆| 制服丝袜中文字幕一区| 欧美色手机在线观看| 91看片淫黄大片一级在线观看| 国产精品资源网站| 国产一区二区三区电影在线观看 | 国产成人精品三级麻豆| 日本不卡的三区四区五区| 亚洲一级二级三级在线免费观看| 国产精品久久久久aaaa| 国产精品素人视频| 亚洲欧洲日韩av| 亚洲丝袜精品丝袜在线| 亚洲美女屁股眼交3| 亚洲日本欧美天堂| 亚洲精品国产一区二区精华液| 中文字幕在线免费不卡| 亚洲三级小视频| 午夜精品久久久久影视| 亚洲一区二区视频| 天天综合色天天综合| 男男成人高潮片免费网站| 老司机精品视频线观看86 | 成人av资源在线| 9i在线看片成人免费| 欧美色网站导航| 欧美一区二区黄| 国产日韩欧美在线一区| 国产精品―色哟哟| 亚洲一区二区三区视频在线播放| 亚洲曰韩产成在线| 久久精品国产色蜜蜜麻豆| 国产精品 欧美精品| 97久久人人超碰| 欧美男人的天堂一二区| 日韩欧美国产一区二区在线播放 | 日本不卡免费在线视频| 国产精品一品二品| 色综合久久66| 日韩欧美一区二区在线视频| 国产亚洲欧美日韩日本| 一区二区欧美视频| 激情文学综合丁香| 91污在线观看| 欧美videos中文字幕| 亚洲视频你懂的| 美女视频黄 久久| 99精品久久只有精品| 欧美一区二区观看视频| 亚洲欧美综合网| 久久精品国产99久久6| 色哟哟在线观看一区二区三区| 在线综合视频播放| 国产精品区一区二区三| 美日韩一级片在线观看| 91麻豆产精品久久久久久| 日韩亚洲欧美在线观看| 亚洲一区在线观看免费观看电影高清 | 欧美日韩激情在线| 国产精品欧美一区喷水| 免费人成黄页网站在线一区二区| 99精品欧美一区二区蜜桃免费 |