0001 template <typename TV, typename TE> 0002 Rank GraphMatrix<TV,TE>::insert(const TV& vertex) { //插入顶点,返回编号 0003 for (Rank u = 0; u < n; u++) //各顶点预留 0004 E[u].insert(nullptr); //一条潜在的关联边 0005 n++; E.insert(Vector<Edge<TE>*>(n)); //创建新顶点对应的边向量 0006 for (Rank u = 0; u < n; u++) //该顶点初始没有 0007 E[n-1].insert(nullptr); //任何联边 0008 V.insert(Vertex<TV>(vertex)); //顶点向量增加一个顶点 0009 return n-1; //新顶点编号 0010 } //insert 0011 0012 template <typename TV, typename TE> 0013 TV GraphMatrix<TV,TE>::remove(Rank v) { //删除第v个顶点及其关联边(0 <= v < n) 0014 for (Rank u = 0; u < n; u++) //所有 0015 if (exists(v, u)) //出边 0016 { delete E[v][u]; V[u].inDeg--; e--; } //逐条删除 0017 E.remove(v); n--; //删除第v行 0018 TV vBak = vertex(v); V.remove(v); //删除顶点v 0019 for (Rank u = 0; u < n; u++) //所有 0020 if (Edge<TE>* x = E[u].remove(v)) //入边 0021 { delete x; V[u].outDeg--; e--; } //逐条删除 0022 return vBak; //返回被删除顶点的信息 0023 } //remove