BFS ocho digitales:
#include <iostream> #include <cstring> #include <cola> #include <unordered_map> utilizando espacio de nombres std; int BFS ( cadena de inicio) { string final = " 12345678x " ; cola de < string > q; unordered_map < string , int > d; q.push (inicio); d [Inicio] = 0 ; int dx [ 4 ] = {- 1 , 1 ,0 , 0 }, dy [ 4 ] = { 0 , 0 , 1 , - 1 }; mientras que (! q.empty ()) { string s = q.front (); q.pop (); int distancia = d [s]; si (s == final) de retorno a distancia; int k = s.find ( ' x ' ); int x = k / 3 , y = k% 3 ; para ( int i = 0 ; i <4 ; i ++ ) { int a = x + dx [i], b = y + dy [i]; si (a> = 0 && a < 3 && b> = 0 && b < 3 ) { swap (s [k], s [a * 3 + b]); si (! d.count (s)) { d [s] = distancia + 1 ; q.push (s); } Swap (s [k], s [a * 3 + b]); } } } Retorno - 1 ; } Int main () { cadena de inicio; cin >> comenzar; cout << BFS (START) << endl; }