Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
///SOLUTIE CU BACKTRACKING. #include
using namespace std; int mat[4][4],v[4][4]; /**Observatie cheie : mutarile se fac modulo 4. Asadar dupa ce efectuam aceiasi mutare de 4 ori la rand ne intoarcem in stadiul initial. Backtrackingul va trece prin toate cele 4^9 mutari = 2^18 = ~260k */ /** ex : 100 va semnifica ca a fost facuta o 000 singura mutare pe linia 1 col 1. 000 Vom folosi baza 4 si vom trece prin toate numerele de la 000 000 000 la 333 333 333 daca nu exista solutie. Altfel vom cauta cea mai scurta solutie, vom pastra matricea si vom afisa mutarile in ordine lexicografica. */ int mutare(int linie,int coloana, int val) { for(int i = 1;i<=3;i++) for(int j = 1;j<=3;j++) if(i==linie||j==coloana) v[i][j] = (v[i][j] + val)%4; } bool valid() { for(int i = 1;i<=3;i++) for(int j = 1;j<=3;j++) if(v[i][j]!=0) return false; return true; } int main() { cout<<"Introdu matricea de 3x3 : \n"; int sol = -1,solsize = -1; for(int i = 1;i<=3;i++) for(int j = 1;j<=3;j++) cin>>mat[i][j]; for(int comb = 0; comb<(1<<18);comb++) { int current = comb; ///Matricea pe care verificam operatiile este v. for(int i = 1;i<=3;i++) for(int j = 1;j<=3;j++) v[i][j] = mat[i][j]; ///Trecem prin toate cifrele din baza 4 chiar daca sunt 0. //(pentru claritate) int nr_mutari = 0; for(int i = 1;i <= 3;i++) { for(int j = 1;j <= 3;j++) { nr_mutari += (current%4); mutare(i,j,current%4); current/=4; if(valid()) { if(sol==-1) sol = comb, solsize = nr_mutari; else if(nr_mutari
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)