Esempio n. 1
0
        public void AddRecord(Record r)
        {
            int            bestRank  = FindRecord(r);
            myCompareClass myCompare = new myCompareClass();

            if (bestRank < 100)
            {
                record[99] = r;
                Array.Sort(record, myCompare);
            }
            SaveGame();
        }
        /// <summary>
        /// Cuthill-McKee algoritm for renumbering nodes
        /// </summary>
        public void RenumberNodes()
        {
            int n = nodes.Count;
            List<int>[] listNodes = new List<int>[nodes.Count];
            for (int i = 0; i < n; i++)
            {
                listNodes[i] = Connections(i); 
            }
            // Sort all connection of i node
            myCompareClass mcc = new myCompareClass(listNodes);
            for (int i = 0; i < n; i++)
            {
                listNodes[i].Sort(mcc);
            }

            // Find node with minimum cinnections
            int minNode = 0;
            int minConnection = listNodes[minNode].Count;
            for (int i = 1; i < n; i++)
            {
                int curConnection = listNodes[i].Count;
                if (minConnection >= curConnection)
                {
                    minNode = i;
                    minConnection = curConnection;
                }
            }

            // Creating renumbered table
            List<int> renumberTable = new List<int>();
            renumberTable.Add(minNode);
            int cur = 0;
            while (renumberTable.Count < n)
            {
                // listNodes[renumberNodes[cur]] - list connection of curent node in renumberTable
                for (int i = 0; i < listNodes[renumberTable[cur]].Count; i++)
                {
                    int curNode = listNodes[renumberTable[cur]][i];
                    if (renumberTable.FindItem(curNode) == -1)
                        renumberTable.Add(curNode);
                }
                cur++; // next renumber node
            }

            // Nodes renumbering
            List<Node> renumberedNodes = new List<Node>();
            for (int i = 0; i < renumberTable.Count; i++)
            {
                renumberedNodes.Add(nodes[renumberTable[i]]);
            }
            nodes = renumberedNodes;

            // Triangles renumbering
            for (int i = 0; i < triangles.Count; i++)
            {
                triangles[i].IndexA = renumberTable.FindItem(triangles[i].IndexA);
                triangles[i].IndexB = renumberTable.FindItem(triangles[i].IndexB);
                triangles[i].IndexC = renumberTable.FindItem(triangles[i].IndexC);
            }

            // Boundary renumbering
            for (int i = 0; i < boundary.Count; i++)
            {
                boundary[i].IndexA = renumberTable.FindItem(boundary[i].IndexA);
                boundary[i].IndexB = renumberTable.FindItem(boundary[i].IndexB);
            }
        }