1. A network controller comprising: one or more ports configured to couple the network controller to one or more network switching devices of a network; the network controller being configured to: receive initiation messages from the network switching devices; receive configuration and status messages from the network switching devices; transmit discovery requests to the network switching devices; receive discovery responses from the network switching devices; determine a network topology of the network based on information associated with the initiation messages, the configuration and status messages, and the discovery responses; apply heuristic rules, associated with at least one of a plurality of base topologies, to the network topology; and select a base topology from the plurality of base topologies based on results of the applied heuristic rules; wherein the heuristic rules include one or more sets of rules selected from a group consisting of virtual link trunking (VLT) heuristic rules, spanning tree heuristic rules, multiple spanning tree heuristic rules, stacking heuristic rules, shortest path bridging MAC heuristic rules, transparent interconnection of lots of links heuristic rules, and link aggregation group (LAG) heuristic rules.