BFS ocho digitales

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; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/longxue1991/p/12668986.html
Recomendado
Clasificación