We study the problem of maximizing the number of spanning trees in a connected graph by adding at most k edges from a given candidate edge set, a problem that has applications in domains including robotics, network science, and cooperative control. By Kirchhoff's matrix-tree theorem, this problem is equivalent to maximizing the determinant of an SDDM matrix. We give both algorithmic and hardness results for this problem: * Stacy Patterson is supported in part by NSF grants CNS-1553340 and CNS-1527287.We study the problem of maximizing the number of spanning trees in a weighted connected graph G by adding at most k edges from a given candidate edge set. By Kirchhoff's matrixtree theorem [Kir47], the number of spanning trees in G is equivalent to the determinant of a minor of the graph Laplacian L. Thus, an equivalent problem is to maximize the determinant of a minor of L, or, more generally, to maximize the determinant of an SDDM matrix. The problem of maximizing the number of spanning trees, and the related problem of maximizing the determinant of an SDDM matrix, have applications in a wide variety of problem domains. We briefly review some of these applications below.In robotics, the problem of maximizing the number of spanning trees has been applied in graph-based Simultaneous Localization and Mapping (SLAM). In graph-based SLAM [TM06], each vertex corresponds to a robot's pose or position, and edges correspond to relative measurements between poses. The graph is used to estimate the most likely pose configurations. Since measurements can be noisy, a larger number of measurements results in a more accurate estimate. The problem of selecting which k measurements to add to a SLAM pose graph to most improve the estimate has been recast as a problem of selecting the k edges to add to the graph that maximize the number of spanning trees [KHD15, KHD16, KSHD16a, KSHD16b]. We note that the complexity of the estimation problem increases with the number of measurements, and so sparse, well-connected pose graphs are desirable [DK06]. Thus, one expects k to be moderately sized with respect to the number of vertices.In network science, the number of spanning trees has been studied as a measure of reliability in communication networks, where reliability is defined as the probability that every pair of vertices can communicate [Myr96]. Thus, network reliability can be improved by adding edges that most increase the number of spanning trees [FL01]. The number of spanning trees has also been used as a predictor of the spread of information in social networks [BAE11], with a larger number of spanning trees corresponding to better information propagation.In the field of cooperative control, the log-number of spanning trees has been shown to capture the robustness of linear consensus algorithms. Specifically, the log-number of spanning trees quantifies the network entropy, a measure of how well the agents in the network maintain agreement when subject to external stochastic disturbances [SM14, dBCM15, ZEP11]. Thus, the problem of ...