Spanning Tree Auxiliary Graphs
arXiv:1705.00119v1 [math.CO] 29 Apr 2017
Abhishek Garg, Mahipal Jadeja, Rahul Muthu Dhirubhai Ambani Institute of Information Communication Technology, Gandhinagar, India {
[email protected], jadeja
[email protected], rahul
[email protected]}
Abstract In this paper, we define a class of auxiliary graphs associated with simple undirected graphs. This class of auxiliary graphs is based on the set of spanning trees of the original graph and the edges constituting those spanning trees. A class of auxiliary graphs can be viewed as a function from the class of graphs to the class of graphs. We provide mathematical characterisation of graphs which are the spanning tree auxiliary graphs of some simple graph. Since the class of spanning tree auxiliary graphs of graphs do not have unique preimages (the forward function is not injective), we derive precisely the classes of graphs which have the same auxiliary graph. We design algorithms for computing a basic preimage and define rules to get other solutions for the same auxiliary graph. We also obtain several results expressing parameters of the auxiliary graph in terms of (not necessarily the same) parameters of the original graph. keywords: Spanning trees, spanning tree auxiliary graph, blocks, 2-connected graphs, cartesian product
1
Introduction
The generic concept of auxiliary graphs is an important one in graph theory. In its most general form it refers to constructing graphs based on some rules applied to any given graph. In other words it is a function from the set of graphs to the set of graphs. The definition is usually based on some natural and important properties of graphs and the computation of the function is easy in principle, even if the algorithm involved could be expensive in terms of computational complexity. What is usually less clear is the range of this function. It is rare for the range of these auxiliary functions to be the entire codomain (in this case the class of all graphs). Thus the challenging and important problems associated with these auxiliary graph families is to characterise mathematical properties of graphs which belong to the range, algorithms for deciding whether a graph belongs to the range or not and also algorithms for computing the inverse image of a given auxiliary graph if it is unique. If the preimage is not unique, then one interesting challenge is to decide what constitutes a minimal/canonical solution and also ways to generate the entire set of solutions by extending the basic solutions. A well known example of auxiliary graphs is the class of line graphs. The characterisation as well as algorithms for recognising this class of graphs and
computing their inverse images has been established in a wide variety of research articles [2] [10] [11]. In this paper we study a class of auxiliary graphs where the vertices of the auxiliary graph represent the spanning trees of a given graph. There is an edge connecting two vertices of the auxiliary graph precisely when the symmetric difference of the edge sets of the corresponding spanning trees has exactly two edges. That is equivalent to saying that the two spanning trees have (n − 2) of their (n − 1) edges common. Diagrammatically, one can label the vertices of a simple graph and also its edges with distinct labels. Given such a labelling of a graph G, one can label the vertices of the spanning tree auxiliary graph Aux(G), each with the list of (n − 1) edges of the spanning tree it represents. From the description above it should be clear that we put an edge between two vertices in the spanning tree auxiliary graph if and only if the labels of the two vertices share (n − 2) of their (n − 1) elements in common. See the figure below for a graph G and its spanning tree auxiliary graph Aux(G). This way of migrating from one spanning tree of a graph to another has already been studied in various places and a similar notion forms the basis of the proofs of correctness of algorithms such as Prim’s and Kruskal’s [9] for computing minimum spanning trees in weighted graphs. Counting or enumerating the spanning trees of graphs has been extensively studied in the literature [3] [8] [12]. This underlines the importance of this class of graphs. Apart from applications of this class of graphs in various problems as described here, it is also challenging combinatorially and algorithmically to characterise this family of graphs. Here, we formalise the notion of spanning tree auxiliary graphs of graphs and characterise them in terms of their mathematical properties. We develop algorithms for recognising such graphs and computing an inverse solution. We provide a complete description of all graphs which constitute preimages on the basis of one basic preimage (the spanning tree auxiliary graph of graphs is not an injective function and each point in the range has infinitely many preimages). We derive relations between parameters of a given graph and (not necessarily the same) parameters of the corresponding auxiliary graph. Throughout, we assume the original graph for which we are considering spanning tree auxiliary graphs is a simple undirected graph. We deal only with connected graphs because the set of disconnected graphs have no spanning trees and hence the corresponding spanning tree auxiliary graphs are trivial, with zero vertices. The rest of this paper is organised as follows. In Section 2 we present definitions and concepts used. We derive results on a few elementary standard graph parameters for the family of spanning tree auxiliary graphs in Section 3. In Section 4, we provide a classification of all maximal cliques that occur in the class of spanning tree auxiliary graphs. Section 5 discusses the role of prime graphs under the cartesian product operator as the building blocks of all spanning tree auxiliary graphs. The spanning tree auxiliary graphs of all 2-connected graphs are shown to belong to the family of prime graphs under the cartesian product
operator. In Section 6 we provide an algorithm that recognises a graph that is a spanning tree auxiliary graph of a simple graph and computes a basic preimage, from which all preimages may be generated. We summarise the results and possible future directions of research in Section 7.
2
Definitions
A tree is a simple undirected connected acyclic graph. A connected unicyclic graph is any graph obtained by augumenting a tree with an edge between a non-adjacent pair of vertices. Given any spanning tree T of a simple connected undirected graph G, adding any edge e ∈ E(G) \ E(T ) results in a unicyclic graph U . Since, G is a simple graph, the unique cycle in U must necessarily be of length at least 3. Suppose it is of length k, then there are exactly (k − 1) non-cut edges in U different from e. Deleting any one of them results in a spanning tree T ′ of G, different from T . We call this process of adding an edge to a spanning tree of a connected graph and deleting some other edge from the unique cycle thus introduced, a unit transformation of type 1. Any two spanning trees can be constructed from one another by a series of unit transformations of type 1, and in fact in at most (n − 1) unit transformations where n is the number of vertices of G. Given any spanning tree T of a graph G, deleting any edge e from T results in a spanning forest of G consisting of exactly two trees T1 and T2 . Adding any edge of the original graph different from e and linking a vertex of T1 to a vertex of T2 results in a spanning tree T ′ different from T . The number of such edges is equal to the number of edges in G between the vertex partition defined by the vertices of T1 and T2 . We call this process of deleting an edge of a spanning tree and relinking the two resulting subtrees by a different edge a unit transformation of type 2. Any two spanning trees can also be constructed from one another by a series of unit transformations of type 2, and in fact in at most (n − 1) unit transformations where n is the number of vertices of G. It should also be evident that any two spanning trees can be constructed from one another by a mixed series of type 1 and type 2 unit transformations, again requiring no more than (n − 1) steps in the most efficient way. Definition 1. Given a simple graph G, we define its spanning tree auxiliary graph Aux(G) as the graph which has a vertex corresponding to each spanning tree of G, and two vertices of Aux(G) are adjacent if and only if the corresponding spanning trees in G can be obtained by a single unit transformation. In this paper the main goal is to characterise the set of all graphs which are Aux(G) for some simple graph G, and also design an algorithm to reconstruct G from a valid instance of Aux(G). Definition 2. A graph G is 2-connected if it cannot be disconnected by deleting fewer than two vertices. In particular, the graph itself must be connected,
because otherwise, it is rendered disconnected by removing zero vertices, which is fewer than two. By definition, the graph K2 is 2-connected. Cycles Cn with n ≥ 3 are also 2-connected. All other 2-connected graphs are constructible by the process of addition of ears, by a result due to Whitney, that we present below. Definition 3. A block in a graph is defined as any maximal 2-connected subgraph of a graph. It is an elementary result that any two blocks in a graph can share at most one common vertex. A useful auxiliary graph to study the block structure of a connected graph is the standard block-cutpoint tree [5] of a graph. The block-cutpoint tree of a graph is computed by a standard algorithm which is an adaptation of depth first search (dfs). We would like to state at the very outset that there are infinitely many graphs which all map to the same Aux graph, and hence we need to develop a notion of a canonical/minimal preimage. Definition 4. A minimal preimage of a spanning tree auxiliary graph is a connected graph none of whose blocks is K2 . The blocks in such a listing maybe linked together in any form allowed by the standard block-cutpoint tree concept. The motivation behind the above definition is that the only changes to a graph that do not alter the spanning tree auxiliary graph are addition of blocks which are all K2 . We now define the notion of ear addition as used by us. The concept is not a new one, but our definition is slightly different and hence we present it here. Definition 5. We define an ear addition as an extension of a graph by adding a path through zero or more new vertices with two distinct existing vertices of the graph as the endpoints of the path. If the endpoints of the path are already adjacent then the ear must contain at least one intermediate vertex since we consider only simple graphs. An ear decomposition of a graph is the reconstruction of the graph from scratch by first drawing one of its cycles and then repeatedly adding an ear. We now state Whitney’s Theorem [13] on 2-connected graphs.. Theorem 1 (Whitney’s Theorem). A graph is 2-connected (apart from K2 ) if and only if it can be obtained by starting with a cycle and performing zero or more operations of ear addition. Observation 1 In 2-connected graphs, every pair of edges has at least one cycle containing both. As a subsidiary goal this paper develops relations between graph parameters of Aux(G) and (not necessarily the same) parameters of G. This intermediate step helps towards the main goal and is also interesting in its own right.
Definition 6. Given two graphs G1 = (V1 , E1 ) and G2 = (V2 , E2 ), the cartesian product H = G1 G2 has vertex set V = V1 ×V2 where × represents the cartesian product of the two vertex sets and an edge connects (u1 , u2 ) to (v1 , v2 ) if and only if u1 = v1 and (u2 , v2 ) ∈ E2 or (u1 , v1 ) ∈ E1 and u2 = v2 . This operator defined for two graphs can be extended iteratively to any number of graphs. The operation is commutative and associative in the sense that the graphs obtained by commuting or bracketing a series of graphs in any order gives rise to the same product graph upto isomorphism. The graph K1 serves as the identity for the cartesian product operator on graphs. It is well known that the nontrivial factors of a graph under the cartesian product operator are unique upto reordering. Definition 7. A graph which has no nontrivial factors under the cartesian product operator is called prime. A graph obtained as the cartesian product of k nontrivial factors [6] [7] is a graph of dimension k under the cartesian product operation. Each vertex in the product graph involving k nontrivial factors is a k dimensional vector where the ith coordinate is a vertex from the ith factor in the product. The degree of a vertex in a graph obtained as the cartesian product of several graphs is the sum of the degrees of the vertices in each of its coordinates in the corresponding factor graphs. Observation 2 Since nontrivial factors involve a minimum degree of at least 1, the presence of every edge of a vertex in the same factor implies the graph is prime. The dimension of each vertex is identical and is the same as the dimension of the graph under cartesian product. Thus, in order to establish that a graph is prime under the cartesian product operator, it is enough to establish that all edges incident to some vertex belong to the same factor. It is also known that all edges of a clique of size three or more in a cartesian product of graphs must all come from the same factor.
3
Parameters
In this section we give some elementary results on some standard graph parameters of spanning tree auxiliary graphs of graphs. Lemma 1. Max. degree: ∆(Aux(G)) ≤ (n(G) − 1) ∗ (m(G) − n(G) + 1) Proof. For a vertex of Aux(G) there is an associated , the number of edges of G not belonging to it is m(g) − n(G) + 1. For each of those edges, adding them to the tree results in a cycle. The length of this cycle is at most n(G), and thus the number of edges on the cycle, different from the one that was added is at
most n(G) − 1. Removing any of these edges generates a new spanning tree of G and thus a neighbour of the vertex considered in Aux(G). Combining these observations gives the upper bound on the maximum degree. Lemma 2. Min Degree: δ(Aux(G)) ≥ 2 ∗ ((m(G) − n(G) + 1) Proof. The proof is almost identical to the previous lemma, the only difference being that we use the lower bound on the length of the cycle created, rather than the upper bound. The lower bound is 3, since we are dealing with simple graphs. The rest of the arguments are identical. Lemma 3. The diameter diam(Aux(G)) ≤ n(G) − 1. Proof. The minimum number of operations to transform one spanning tree to the other is the size of the set difference of the edge sets of the two spanning trees. This can never be more than the number of edges in the tree, this bound being achieved in case of edge disjoint spaning trrees. Thus the result follows. Lemma 4. The Clique Number: ω(Aux(G)) = M ax{Circumf erence(G), |maximum minimal edgecut(G)|} Proof. Every maximal clique in Aux(G) corresponds to either a cycle in G or a minimal edge cut in G as explained along with the definitions of the two types of unit transformations. Thus the maximum clique size in Aux(G), which is necessarily a maximal clique is a largest among these. Thus the result follows.
4
Classification of Maximal cliques in Aux(G) in terms of structures in G
Here we describe cliques on three or more vertices in Aux(G). Each spanning tree of a graph G has exactly (n − 1) edges where n is the number of vertices in G. Consider a clique of size three in Aux(G). This clique represents three spanning trees of G each pair among which there is exactly (n − 2) common edges. There are two possibilities for the common intersection of the edge sets of all three spanning trees. Either it is (n − 3) or it is (n − 2). If we consider any fourth vertex to augment the three clique to a four clique, then in the first case, the common intersecton of the edge sets of the four spanning trees will go down to (n − 4), while in the second case it will remain (n − 2). The same logic extends to larger cliques. If it is a clique of type 1, then the common intersection decreases for each added vertex, while if it is of type 2, the common intersection remains (n − 2). Structurally cliques of type 1 arise from cycles in G and cliques of type 2 arise from minimal edge cuts in G. The neighbourhood of each vertex in Aux(G) can be partitioned into maximal cliques in these two different ways. In the first case the number of cliques in the
partition is m − n + 1 one corresponding to each edge of G not in the spanning tree T . In the second case the number of cliques in the partition is n − 1, one for each edge in the spanning tree T . Each maximal clique in Aux(G) is a direct and exclusive consequence of either a cycle in G or a minimal edge-cut in G. The size of the cliques resulting in these two cases are respectively the length of the cycle and the number of edges in the edge-cut respectively. To summarise: Due to cycles: Take any cycle C of length k in G. Consider a spanning tree T which uses some (k − 1) of the edges of this cycle. Let F be the forest resulting by deletion of these (k − 1) edges from T . Clearly appending any path of (k − 1) edges of the cycle C to the edges of F result in a spanning tree of G and differ from any other such tree in exactly one edge. Thus these are all pairwise adjacent and form a maximal clique of size k in Aux(G). Due to minimal edge-cuts: We assume G is connected and let E constitute a minimal edge cut of G containing k edges. The deletion of the edges of E results in a two component graph. Take any fixed spanning forest of this two component graph containing spanning trees T1 and T2 of the two components respectively. Cross connecting T1 and T2 with any of the k edges of E results in a spanning tree of G. Clearly each of these spanning trees differ from each other in exactly one edge. Thus, they constitute a maximal clique of size k in Aux(G). There are two basic ways of creating a new spanning tree of a graph starting from a given spanning tree of the same graph. These are very similar to each other as single operations go but when we consider a series of these operations (or more precisely a large number of possibilities of completing the second phase of these operations) the difference between them becomes important and hence we consider both. The first is to add an edge of the original graph not present in the spanning tree creating a unicyclic graph and then deleting some edge different from the one that was added that belongs to the unique cycle in the unicyclic graph. This is what we called a unit transformation of Type I in our earlier definition. The other method which is almost a dual of the previously mentioned one is to first delete an edge of the spanning tree and interconnecting the two subtrees thus formed using some different edge of the original graph that links a vertex from one subtree to a vertex of the other subtree. This is what we called a unit transformation of Type II in our earlier definition.
5
Minimal Preimage and multiple preimages
Here we describe the properties which make two or more graphs map to the same Aux graph. Theorem 2. The auxiliary graph of G consisting of blocks B1 , . . . , Bk is the cartesian product of the individual auxiliary graphs. That is: Aux(G) = Aux(B1 ) · · · Aux(Bk )
Proof. Consider any graph G and any spanning tree T of G. Let B be some block of G and let T [B] be the subgraph of T induced by the vertices of B. Clearly T [B] is a tree. If it were a forest with more than one component, it means there exists a path leaving the vertices of B and coming back linking distinct vertices of B via a path with vertices outside B. This contradicts the assumption that B is a block. Thus, the spanning trees of any connected graph can all be be obtained by patching together in any way individual spanning trees of each block of G. In fact any spanning tree of G can be obtained by this procedure and and any tree resulting from this patching together of spanning trees of blocks is also a spanning tree of G. It follows from the above that any spanning tree of a graph can be viewed as an (ordered) list of spanning trees of its individual blocks. Different spanning trees of the graph can be obtained by starting with some spanning tree and then varying independently the spanning trees of each block. In other words the set of all spanning trees of the graph can be obtained as vectors of dimension k where k is the number of blocks of G. We may also recall that in Aux(G), two vertices (representing two distinct spanning trees in G) are adjacent if and only if they can be obtained from each other via a unit transformation. Also the edges involved in this unit transformation must both come from the same block of G since they form a part of a cycle in G and there can be no cycle crossing more than one block. Thus we can say that the two ”adjacent” spanning trees agree in their restriction in all blocks except one, and on the one where they disagree, they differ by a unit transformation. If we were to treat these spanning trees a k dimension vectors one for each block of G, then it is like the cartesian product of the individual graphs. Theorem 3. If G′ is obtained from a graph G by iteratively appending new blocks to G each of which is a K2 results in no change in Aux(G′ ) from Aux(G). This is because Aux(K2 ) = K1 and Aux(G)K1 = Aux(G). Theorem 4. Let G be a connected graph with no cut edges, and let H = Aux(G). Then H is a prime graph under the cartesian product operation if and only if G is a 2-connected graph. As already argued above, the spanning tree auxiliary graph of an arbitrary graph is the cartesian product of the spanning tree auxiliary graphs of each of its blocks. Thus it only remains to demonstrate the converse. Here we focus on an arbitrary vertex x in Aux(G) and argue that all the edges incident to x in Aux(G) come from the same factor. This will imply that Aux(G) is prime under the cartesian product operator. We will, of course, have to use the fact that G is 2-connected in the course of our proof. Consider the spanning tree Tx of G corresponding to the vertex x in Aux(G). The edges incident to x in Aux(G) connect it to its neighbours. Hence, these
correspond to spanning trees of G obtained from Tx by a single unit transformation. Consider an edge e in Tx . Deleting e from Tx results in a spanning forest of G with exactly two trees T1 and T2 . Since G is 2-connected, there is at least one edge in G apart from e linking the vertices of T1 to the vertices of T2 . If there is exactly one such edge then it corresponds to a cycle clique in Aux(G) and if there is more than one then they together form a minimal edge cut clique in Aux(G). Hence in both these cases all these edges incident to x are from the same factor. Now consider two incident edges e1 and e2 in Tx . One can consider constructing Tx from G by repeatedly deleting edges that lie on a cycle until the graph is acyclic. Fix all cycles of the graph containing both e1 and e2 (by observation 1 there is at least one such cycle). Remove an edge from every cycle except the cycles which contain both e1 and e2 . now all remaining cycles have both these edges left, and hence the last edge deleted will destroy a cycle containing both e1 and e2 . Let this deleted edge be e′ . Thus there is a cycle clique in Aux(G) corresponding to trees obtained by selecting all but one edge on this cycle and all other edges from Tx . This includes the node x and hence all these edges incident to x and involving unit transformation deleting incident edges in Tx also come from the same factor. Now extending this idea for successive edges incident to each other on a path in Tx we have established that all edges incident to x are from the same factor. From observation 2, Aux(G) is prime under cartesian product. Thus Aux(G) is prime if G is 2-connected and has no cut-edges. Observation 3 Aux(T ) = K1 for any tree T . This follows because a tree has exactly one spanning tree. Note that the spanning tree auxiliary graph of a tree- the complete graph on one vertex, K1 - is also the identity for the cartesian product operator. Thus, from the previous two theorems, we conclude, that appending any number of blocks which are trees to a given graph, does not alter the spanning tree auxiliary graph of that graph. Thus minimal preimages contain no cut-edges.
6
Characterisation of Aux
Here we describe some properties of spanning tree auxiliary graphs and show how they can be applied to developing ideas for an algorithm to compute the inverse. Type I clique: After the addition of the edge, deleting any edge of the cycle created constitutes a clique in the neighbourhood of the vertex corresponding to the original tree in the auxiliary graph. Thus corresponding to a cycle of length k in the original graph any spanning tree consisting of (k − 1) of these edges has in its neighbourhood a clique of size k associated with this cycle. The number of such cliques in the neighbourhood is equal to the number of edges in the graph not part of the spanning tree. This number is clearly equal to m(G) − n(G) + 1.
This is therefore the number of such cliques into which the neighbourhood of each vertex can be partitioned. Type II clique: After the deletion of the edge, adding eny edge bridging the resulting two subtrees results in a clique. The number of vertices in the neighbourhood of the vertex associated with this spanning tree in the auxiliary graph is equal to the number of other edges crossing this minimal edge cut. Thus it results in a clique of size (k − 1) in the neighbourhood of this vertex in the auxiliary graph. This kind of operation can be performed with any of the (n − 1) edges of the tree and hence the neighbourhood of a vertex in Aux(G) can be partitioned in a different way into exactly n − 1 maximal cliques. Observation 4 Every clique of size 3 or more in Aux(G) uniquely extends to a maximal clique. Therefore these cliques can be computed in polynomial time. 6.1
Algorithm for computing a basic preimage
Thus, one can perform the operation of partitioning the neighbourhod of each vertex in the auxiliary graph into cliques in two ways and obtain simultaneous linear equations in the two variables n and m. This results (surprisingly) in two possible solutions, because the right hand side numbers in these two equations can be exchanged. Any graph which has a nontrivial spanning tree auxiliary graph must be connected since it has spanning trees. We use these along with properties developed in Section 3 to get values of m and n. The simultaneous equations described above must be consistent across all vertices of a potential Aux(G), in order for the graph to be a spanning tree auxiliary graph. If it fails for at least one vertex then the graph is not a spanning tree auxiliary graph of any graph. Having obtained values of m(G) and n(G), we now focus on the subgraph of Aux(G) induced by some arbitary vertex x and its neighbourhood N (x). Call this subgraph H. H essentially reprents one spanning tree of G namely x and all other spanning trees obtainable from x by applying a single unit transformation. We do not have the actual structure of T or any of the other trees represented by vertices in H. We had earlier computed two partitions of the neighbourhood of each vertex of Aux(G) into maximal cliques. One of the partitions represents cycle cliques and the other represents minimal edge-cut cliques. Having obtained the values of m(G) and n(G), we know which of the two partitions reprents cycle cliques and which represents minimal edge-cut cliques. Hence, with respect to the spanning tree of G associated with x, we can use sizes of the maximal cliques in the cycle clique partition to list the lengths of all fundamental cycles of G. Similarly, we use the edge-cut clique partition to list the number of edges of G connecting the vertex sets of the two subtrees obtained by deleting any edge of the spanning tree associated with x. Theorem 5. We have reduced the problem of computing G from Aux(G) to reconstructing a graph from the following information. – Number of vertices n(G)
– Number of edges m(G) – The lengths of all fundamental cycles with respect to a specific spanning tree, (say T ). – The number of edges of G crossing between the vertex sets of the two subtrees obtained by deleting any edge of T . – Other results mentioned in Section 3. Given an arbitrary graph we first compute its prime factors under the cartesian product operation using well known algorithms [1]. The above result applies only to 2-connected instance of G (and consequently Aux(G) is prime under cartesian product). For graphs which are not 2-connected the algorithm uses Theorem 4 to reduce into several subproblems and then apply the above result. 6.2
Analysis
We give here a brief informal analysis of running time of the algorithm provided by us. – Prime factors of the input graph can be computed in polynomial time [4]. – From Observation 4, it is possible to compute all the maximal cliques in polynomial time (assuming the graph is the spanning tree auxiliary graph of some graph). This can be done in O(n4 ) time because there are O(n3 ) triangles and each extends greedily to unique maximal clique. – If the decomposition of the previous step is consistent across all the vertices then n(G) and m(G) can be computed in polynomial time. – The reduction indicated by Theorem 5 can be done in polynomial time. We are currently working on constructing graphs from the information that results after applying the reduction of Theorem 5.
7
Conclusions
We have looked at the important class of spanning tree auciliary graphs and given a mathematical characterisation of such graphs. We have also translated the mathematical result into efficient algorithmic ideas for recognising graphs of this class. This idea can often help in computing the inverse graph, but there is scope to improve the algorithmic idea into a concrete and precise algorithm. Further studies of properties of this class of graphs and improved algorithms for recognition are possible future directions of related research particularly for algorithmic version of Theorem 5.
References 1. F. Aurenhammer, J. Hagauer, and W. Imrich. Cartesian graph factorization at logarithmic cost per edge. Computational Complexity, 2:331–349, 1992.
2. M Behzad. A characterization of total graphs. Proceedings of the American Mathematical Society, 26(3):383–389, 1970. 3. Seth Chaiken and Daniel J Kleitman. Matrix tree theorems. Journal of combinatorial theory, Series A, 24(3):377–381, 1978. 4. Joan Feigenbaum, John Hershberger, and Alejandro A Sch¨ affer. A polynomial time algorithm for finding the prime factors of cartesian-product graphs. Discrete Applied Mathematics, 12(2):123–138, 1985. 5. Frank Harary and Geert Prins. The block-cutpoint-tree of a graph. Publ. Math. Debrecen, 13:103–107, 1966. 6. Wilfried Imrich and Iztok Peterin. Recognizing cartesian products in linear time. Discrete Mathematics, 307(3):472–483, 2007. ˇ 7. Wilfried Imrich and Janez Zerovnik. Factoring cartesian-product graphs. Journal of Graph Theory, 18(6):557–567, 1994. 8. Sanjiv Kapoor and Hariharan Ramesh. Algorithms for enumerating all spanning trees of undirected and weighted graphs. SIAM Journal on Computing, 24(2):247– 265, 1995. 9. Joseph B Kruskal. On the shortest spanning subtree of a graph and the traveling salesman problem. Proceedings of the American Mathematical society, 7(1):48–50, 1956. 10. Philippe GH Lehot. An optimal algorithm to detect a line graph and output its root graph. Journal of the ACM (JACM), 21(4):569–575, 1974. 11. Nicholas D Roussopoulos. A max {m, n} algorithm for determining the graph h from its line graph g. Information Processing Letters, 2(4):108–112, 1973. 12. Akiyoshi Shioura, Akihisa Tamura, and Takeaki Uno. An optimal algorithm for scanning all spanning trees of undirected graphs. SIAM Journal on Computing, 26(3):678–692, 1997. 13. Hassler Whitney. Non-separable and planar graphs. In Classic Papers in Combinatorics, pages 25–48. Springer, 2009.