//determine les fils d'un noeud public List <Coutuniforme> getfils() { string pos = getposition(); int i = int.Parse(pos[0].ToString()); int j = int.Parse(pos[1].ToString()); var list = new List <Coutuniforme>(); if (i + 1 < size) { // i+1 permutation int[,] m = (int[, ])matrice.Clone(); int x; x = m[i, j]; m[i, j] = m[i + 1, j]; m[i + 1, j] = x; //affecter a une node Coutuniforme s = new Coutuniforme(); s.matrice = m; s.size = size; s.arrive = this.arrive; s.Cout = this.Cout + 1; list.Add(s); } if (i - 1 >= 0) { // i+1 permutation int[,] m = (int[, ])matrice.Clone(); int x; x = m[i, j]; m[i, j] = m[i - 1, j]; m[i - 1, j] = x; //affecter a une node Coutuniforme s1 = new Coutuniforme(); s1.matrice = m; s1.size = size; s1.arrive = this.arrive; s1.Cout = this.Cout + 1; list.Add(s1); } if (j + 1 < size) { // i+1 permutation int[,] m = (int[, ])matrice.Clone(); int x; x = m[i, j]; m[i, j] = m[i, j + 1]; m[i, j + 1] = x; //affecter a une node Coutuniforme s2 = new Coutuniforme(); s2.matrice = m; s2.arrive = this.arrive; s2.size = size; s2.Cout = this.Cout + 1; list.Add(s2); } if (j - 1 >= 0) { // i+1 permutation int[,] m = (int[, ])matrice.Clone(); int x; x = m[i, j]; m[i, j] = m[i, j - 1]; m[i, j - 1] = x; //affecter a une node Coutuniforme s3 = new Coutuniforme(); s3.matrice = m; s3.size = size; s3.arrive = this.arrive; s3.Cout = this.Cout + 1; list.Add(s3); } return(list); }
static void Main(string[] args) { //PriorityQueue<Node> ouverture = new PriorityQueue<Node>(); Console.Title = "Le taquin "; Console.BufferHeight = 300; Console.WindowHeight = 42; Console.BackgroundColor = ConsoleColor.DarkBlue; Console.ForegroundColor = ConsoleColor.Yellow; //Le Menu principal Menu(); int rep = 0; do { Console.SetCursorPosition(40, 15); Console.WriteLine("Taper votre choix : "); Console.SetCursorPosition(40, 16); string Response = Console.ReadLine(); if (int.TryParse(Response, out rep)) { rep = int.Parse(Response); } else { Console.Write("Choix incorrecte"); } } while (rep > 3 || rep < 1); Console.Clear(); // La saisie de la taille de la matrice int size = 0; do { Console.WriteLine("Donnez la taille de la martice"); string sz = Console.ReadLine(); if (int.TryParse(sz, out size)) { size = int.Parse(sz); } else { Console.Write("Choix incorrecte"); } } while (size == 0); //LA saisie de matrice de depart var Matrice_depart = new int[size, size]; Console.WriteLine("Donner la matrice de depart!"); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { Console.WriteLine("Donner M[{0},{1}]", i, j); string s = Console.ReadLine(); if (int.TryParse(s, out Matrice_depart[i, j])) { Matrice_depart[i, j] = int.Parse(s); } else { Console.WriteLine("Vous devez saisir une entier"); j--; } } } //LA saisie de matrice d'arrive var matrice_arrive = new int[size, size]; Console.WriteLine("Donner la matrice de d'arrivee!"); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { Console.WriteLine("Donner M[{0},{1}]", i, j); string s = Console.ReadLine(); if (int.TryParse(s, out matrice_arrive[i, j])) { matrice_arrive[i, j] = int.Parse(s); } else { Console.WriteLine("Vous devez saisir une entier"); j--; } } } Console.WriteLine("Matrice d'arrivée"); Afficher(matrice_arrive, size); Console.WriteLine("Matrice de depart"); Afficher(Matrice_depart, size); Console.ReadKey(true); if (rep == 1) { BestFirstSearch firstnode = new BestFirstSearch(); firstnode.matrice = Matrice_depart; firstnode.arrive = matrice_arrive; firstnode.size = size; firstnode.Heristique = firstnode.calculer_heutstique(); Console.WriteLine("Heristique" + firstnode.calculer_heutstique()); Console.WriteLine(); firstnode.jouer(); } else if (rep == 2) { Coutuniforme node = new Coutuniforme(); node.matrice = Matrice_depart; node.arrive = matrice_arrive; node.size = size; node.Cout = 0; Console.WriteLine("Cout : " + node.Cout); Console.WriteLine(); node.jouer(); } else if (rep == 3) { Astar node = new Astar(); node.matrice = Matrice_depart; node.arrive = matrice_arrive; node.size = size; node.Cout = 0; node.Heristique = node.calculer_heutstique(); node.Coutheur = node.Heristique; node.jouer(); } Console.ReadKey(true); }
public void jouer() { int[,] arrive = this.arrive; var fermeture = new List <Coutuniforme>(); var ouverture = new List <Coutuniforme>(); //Afficher(Matrice_depart); //creation de l'arbre Coutuniforme n = new Coutuniforme(); n.matrice = this.matrice; n.Cout = this.Cout; n.size = this.size; var rac = n; var racine = new Coutuniforme(); racine.matrice = this.arrive; ouverture.Add(n); //Afficher(Matrice_depart); //Console.WriteLine("heuristique :" + n.calculer_heutstique(Matrice_depart)); List <Coutuniforme> l = new List <Coutuniforme>(); while (!ouverture.Contains(racine) || fermeture.Count == 0) { n = ouverture[0]; l = n.getfils(); n.fils = l; foreach (var x in l) { for (int i = 0; i < fermeture.Count; i++) { if (fermeture[i].Equals(x)) { if (x.Cout <= fermeture[i].Cout) { fermeture.RemoveAt(i); } } } if (!ouverture.Contains(x)) { ouverture.Add(x); } } fermeture.Add(ouverture[0]); ouverture.RemoveAt(0); ouverture = ouverture.OrderBy(o => o.Cout).ToList(); //Afficher l'ouverture Console.WriteLine("Ouverture"); foreach (var x in ouverture) { Afficher(x.matrice, x.size); Console.WriteLine("Cout :" + x.Cout); } //affichage de la fermeture Console.WriteLine("fermeture"); foreach (var x in fermeture) { Afficher(x.matrice, x.size); Console.WriteLine("Cout :" + x.Cout); } // Console.ReadKey(true); Console.Clear(); } ////Afficher l'ouverture //foreach (var y in ouverture) //{ // Afficher(y.matrice, y.size); //} ////affichage de la fermeture //foreach (var x in fermeture) //{ // Afficher(x.matrice, x.size); // Console.WriteLine("Cout :" + x.Cout); //} }