/// <summary>
        ///     Build a List of Columns from a PetriNet
        /// </summary>
        /// <param name="petriNet"></param>
        /// <returns></returns>
        /// <author>Jannik Arndt</author>
        public static List <Column> Build(PetriNet petriNet)
        {
            // Initialize
            GlobalColumnList.Clear();

            Column firstColumn = new Column(0);
            Place  startPlace  = (Place)petriNet.GetSources()[0];

            firstColumn.HashSetOfNodes.Add(startPlace);
            GlobalColumnList.Add(firstColumn);

            // Recursively add all columns
            AddPlace(startPlace, 1);

            // Correct the end-place
            Place  endPlace = (Place)petriNet.GetSinks()[0];
            Column temp     = FindNode(endPlace);

            if (temp != null && temp.ColumnNumber < GlobalColumnList.Count)
            {
                temp.HashSetOfNodes.Remove(endPlace);
                TrimGlobalColumnList();
                GetOrCreateColumn(GlobalColumnList.Count).HashSetOfNodes.Add(endPlace);
            }

            return(GlobalColumnList);
        }