public string[] AStar_SOLVE_USing_HAMMing(int CASE, string FileName1="TEST.txt") { OPenList = new PaiortyQueue(); size = ARR2D.read_from_file(ARR, CASE, FileName1); NODE X = new NODE(size); X.Parent = null; X.PUZZLE = getACopy(ARR); X.HeuristicValue = Hamming(ARR, size); X.move = ""; X.PuzzleSIze = size; X.COSTSOFAR = 0; X.calac_Total_using_Hamming(); OPenList.push(X); ClosedList = new SortedDictionary<string, NODE>(); if (ChecK_Solved()) { while (OPenList.opendlistsize() != 0) { NODE CURR = new NODE(size); NODE TEMPNODE = new NODE(size); NODE T = new NODE(size); CURR = OPenList.POP(); TEMPNODE.EQUAL(CURR); T.EQUAL(CURR); if (CURR.HeuristicValue == 1) { return Get_Path(CURR); } try { ClosedList.Add(GenerateAKEy(CURR.PUZZLE, CURR.PuzzleSIze), CURR); } catch(Exception E) { MessageBox.Show("OUT OFF MEMORY" , "WRONG" , MessageBoxButtons.OK , MessageBoxIcon.Warning); } //Console.WriteLine("********************************************************"); foreach (KeyValuePair<string, string> it in ARR_MOVES) { bool change = false; ARR2D.SETMAINARRANDTEMP(getACopy(CURR.PUZZLE)); CURR.PUZZLE = ARR2D.GetTempArr(it.Key, ref change); Num_Hamming = Hamming(CURR.PUZZLE, size); if (change) { string CurentKey = GenerateAKEy(CURR.PUZZLE, size); if (ClosedList.ContainsKey(CurentKey)) { NODE NewNode = new NODE(size); ClosedList.TryGetValue(CurentKey, out NewNode); if (Num_Hamming + CURR.COSTSOFAR + 1 < NewNode.TOTAL) { ClosedList.Remove(CurentKey); NODE newnode = new NODE(size); newnode.HeuristicValue = Num_Hamming; newnode.PUZZLE = getACopy(CURR.PUZZLE); newnode.PuzzleSIze = size; newnode.move = it.Key; newnode.COSTSOFAR = TEMPNODE.COSTSOFAR + 1; newnode.calac_Total_using_Hamming(); newnode.Parent = TEMPNODE; OPenList.push(newnode); } } else { NODE newnode = new NODE(size); newnode.HeuristicValue = Num_Hamming; newnode.PUZZLE = getACopy(CURR.PUZZLE); newnode.PuzzleSIze = size; newnode.move = it.Key; newnode.COSTSOFAR = TEMPNODE.COSTSOFAR + 1; newnode.calac_Total_using_Hamming(); newnode.Parent = TEMPNODE; OPenList.push(newnode); } change = false; CURR.PUZZLE = ARR2D.GetTempArr(it.Value, ref change); } } } } return null; }
public string[] AStar_SOLVE_using_Mnhaten(int CASE, string FileName1 = "TEST.txt") { OPenList = new PaiortyQueue(); size = ARR2D.read_from_file(ARR, CASE, FileName1); NODE X = new NODE(size); X.Parent = null; X.PUZZLE = getACopy(ARR); X.HeuristicValue = Manhateen(ARR, size); X.move = ""; X.PuzzleSIze = size; X.COSTSOFAR = 0; X.calac_Total_using_Manhateen(); OPenList.push(X); ClosedList = new SortedDictionary <string, NODE>(); int bestlevel; bestlevel = int.MaxValue; if (ChecK_Solved()) { while (OPenList.opendlistsize() != 0) { NODE CURR = new NODE(size); NODE TEMPNODE = new NODE(size); NODE T = new NODE(size); CURR = OPenList.POP(); TEMPNODE.EQUAL(CURR); T.EQUAL(CURR); if (CURR.HeuristicValue == 0) { return(Get_Path(CURR)); } try { ClosedList.Add(GenerateAKEy(CURR.PUZZLE, CURR.PuzzleSIze), CURR); } catch (Exception E) { MessageBox.Show("OUT OFF MEMORY", "WRONG", MessageBoxButtons.OK, MessageBoxIcon.Warning); } //Console.WriteLine("********************************************************"); foreach (KeyValuePair <string, string> it in ARR_MOVES) { bool change = false; ARR2D.SETMAINARRANDTEMP(getACopy(CURR.PUZZLE)); CURR.PUZZLE = ARR2D.GetTempArr(it.Key, ref change); Num_Manhateen = Manhateen(CURR.PUZZLE, size); if (change) { string CurentKey = GenerateAKEy(CURR.PUZZLE, size); if (ClosedList.ContainsKey(CurentKey)) { NODE NewNode = new NODE(size); ClosedList.TryGetValue(CurentKey, out NewNode); if (Num_Manhateen + CURR.COSTSOFAR + 1 < NewNode.TOTAL) { ClosedList.Remove(CurentKey); NODE newnode = new NODE(size); newnode.HeuristicValue = Num_Manhateen; newnode.PUZZLE = getACopy(CURR.PUZZLE); newnode.PuzzleSIze = size; newnode.move = it.Key; newnode.COSTSOFAR = TEMPNODE.COSTSOFAR + 1; newnode.calac_Total_using_Manhateen(); newnode.Parent = TEMPNODE; OPenList.push(newnode); } } else { NODE newnode = new NODE(size); newnode.HeuristicValue = Num_Manhateen; newnode.PUZZLE = getACopy(CURR.PUZZLE); newnode.PuzzleSIze = size; newnode.move = it.Key; newnode.COSTSOFAR = TEMPNODE.COSTSOFAR + 1; newnode.calac_Total_using_Manhateen(); newnode.Parent = TEMPNODE; OPenList.push(newnode); } change = false; CURR.PUZZLE = ARR2D.GetTempArr(it.Value, ref change); } } } } return(null); }