示例#1
0
        public int Compare(int x, int y)
        {
            if (x == y)
            {
                return(0);
            }
            int nidX    = _loader.IdFromPos(x);
            int nidY    = _loader.IdFromPos(y);
            int xDegree = _loader.InEdgeCount(nidX) + _loader.OutEdgeCount(nidX);
            int yDegree = _loader.InEdgeCount(nidY) + _loader.OutEdgeCount(nidY);

            return(xDegree < yDegree ? 1 : -1);
        }
        // Sorts positions in _loader so their corresponding vertices run from
        // highest total degree to lowest
        public int Compare(int x, int y)
        {
            if (x == y)
            {
                return(0);
            }
            var vidX    = _loader.IdFromPos(x);
            var vidY    = _loader.IdFromPos(y);
            var xDegree = _loader.InEdgeCount(vidX) + _loader.OutEdgeCount(vidX);
            var yDegree = _loader.InEdgeCount(vidY) + _loader.OutEdgeCount(vidY);

            return(yDegree.CompareTo(xDegree));
        }
示例#3
0
        /// <summary>
        /// Turn VfGraph to VfGraph Ivtx mapping into Graph to Graph vid mapping
        /// </summary>
        /// <param name="isomorphismVfIvtx1To2">The VfGraph to VfGraph mapping</param>
        /// <param name="degreeSortedToOriginal1">VfGraph1 Ivtx to Graph1 Ivtx mapping</param>
        /// <param name="degreeSortedToOriginal2">VfGraph2 Ivtx to Graph2 Ivtx mapping</param>
        /// <param name="isomorphismVid1ToVid2">Returned Graph1 vid to Graph2 vid mapping</param>
        /// <param name="isomorphismVid2ToVid1">Returned Graph2 vid to Graph1 vid mapping</param>
        private void VfGraphVfGraphIvtxToGraphGraphVid(
            Dictionary <int, int> isomorphismVfIvtx1To2,
            List <int> degreeSortedToOriginal1,
            List <int> degreeSortedToOriginal2,
            out Dictionary <int, int> isomorphismVid1ToVid2,
            out Dictionary <int, int> isomorphismVid2ToVid1)
        {
            // Holding areas for new permutations
            isomorphismVid1ToVid2 = new Dictionary <int, int>();
            isomorphismVid2ToVid1 = new Dictionary <int, int>();

            foreach (var pair in isomorphismVfIvtx1To2)
            {
                var vfIvtx2 = pair.Value;
                var ivtx1   = degreeSortedToOriginal1[pair.Key];
                var vid1    = _ldr1.IdFromPos(ivtx1);
                if (vfIvtx2 == MapIllegal)
                {
                    isomorphismVid1ToVid2[vid1] = MapIllegal;
                    break;
                }
                var ivtx2 = degreeSortedToOriginal2[vfIvtx2];
                var vid2  = _ldr2.IdFromPos(ivtx2);
                isomorphismVid1ToVid2[vid1] = vid2;
                isomorphismVid2ToVid1[vid2] = vid1;
            }
        }
示例#4
0
        internal VfnNode(IGraphLoader loader, int inodGraph, Dictionary <VfeNode, VfeNode> dctEdge, int[] mpInodGraphInodVf)
        {
            int nid = loader.IdFromPos(inodGraph);

            _objAttr      = loader.GetNodeAttr(nid);
            _arvfeEdgeOut = new VfeNode[loader.OutEdgeCount(nid)];
            _arvfeEdgeIn  = new VfeNode[loader.InEdgeCount(nid)];
            MakeEdges(loader, nid, dctEdge, mpInodGraphInodVf);
        }
示例#5
0
        internal VfVertex(IGraphLoader <TV, TE> loader, int ivtxGraph, Dictionary <VfEdge, VfEdge> dctEdge, List <int> mpIvtxGraphIvtxVf)
        {
            var vid = loader.IdFromPos(ivtxGraph);

            _attribute = loader.GetVertexAttr(vid);
            _outEdges  = new VfEdge[loader.OutEdgeCount(vid)];
            _inEdges   = new VfEdge[loader.InEdgeCount(vid)];
            MakeEdges(loader, vid, dctEdge, mpIvtxGraphIvtxVf);
        }