lien Sujet: http: //poj.org/problem id = 3050?
Signification des questions: Q Combien d'espèces de six (reproductible) constituée d'une chaîne continue de matrice choisie 5 * 5
Pensée: Ceci est une échelle pas beaucoup d'un problème ou la recherche violente.
La difficulté est de déterminer s'il y a double emploi, l'idée est de commencer après une chaîne à six chiffres excel réordonnancement pommes comparer des pommes, (en fait, vous pouvez le faire), mais cela augmenterait la taille du sujet, de sorte que l'utilisation de la STL de C récipient ensemble.
#include <iostream> #include <algorithme> #include <cstdio> #include < set > en utilisant l' espace de noms std; int s [ 6 ] [ 6 ]; int dx [ 4 ] = { 0 , 0 , 1 , - 1 }, dy [ 4 ] = { 1 , - 1 , 0 , 0 }; set < int > st; vides dfs ( int x, int y, intNUM, int Val) { IF (NUM == . 6 ) { st.insert (Val); // SET vraiment bien bon parce que double de désaccentuation numérique est aussi efficace retour ; } pour ( int I = 0 ; I < . 4 ; I ++ ) { int NX = X + DX [I]; int NY = Y + Dy [I]; SI (NX> = 0 && NX < 5. = && NY> 0 && NY < 5. ) { NUM ++ ; DFS ( NX, NY, NUM, Val * 10 +S [NX] [NY]); NUM -; // ceci est une fosse, un début oublie toujours de restaurer, d'être donné Bangbang Bang } } } int main ( vide ) { pour ( int I = 0 ; I < . 5 ; I ++ ) { pour ( int J = 0 ; j < . 5 ; J ++ ) { Scanf ( " % D " , et S [i] [j]); } getchar (); } pour ( int I = 0 ; I < 5. ; I ++) Pour ( int j = 0 ; j < 5 ; j ++ ) dfs (i, j, 1 , S [i] [j]); // printf ( "% d \ n", st.size ()); Cout << st.size () << endl; retourner 0 ; }