screw me... ce tema ai dat si tu kashim.... in mare am facut codul, doar ca imi trebuie un submatrix.in ca sa il testez, da-mi asta si corectez (e netestat, poate merge, poate nu, dar de compilat compileaza)
scriu cu <code> ca sa mi se pastreze indentarea...
edit: mda, codul nu merge, fac debugging acuma...
edit2: lol, codul mergea bine, gresisem eu ca denumisem fisieru submatrix.in si nu submatrix1.in si nu imi vedea fisierul , mama ce bula sunt...
oricum, am un program care sa poata genera un fisier de intrare...
scriu cu <code> ca sa mi se pastreze indentarea...
Cod:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
class raspuns
{
public:
int x, y, lung;
raspuns()
{x=0;
y=0;
lung=0;}
void set(raspuns var)
{x=var.x;
y=var.y;
lung=var.lung;}
void set(int a, int b, int c)
{x=a;
y=b;
lung=c;}
};
int a[300][300],m,n,k;
raspuns rasp;
int numere_distincte(raspuns var)
{
int i,j,w, distincte = 0, numere[9000],ok;
for(i=0;i<var.lung;i++)
for(j=0;j<var.lung;j++)
{ok=1;
for(w=0;w<distincte;w++)
if(a[var.x+i][var.y+j] == numere[w]) ok=0;
if(ok)
{
numere[distincte+1] = a[var.x+i][var.y+j];
distincte++;}
}
return distincte;
}
bool valid (raspuns var)
{
if(var.lung < 1) return 0;
if(var.lung < rasp.lung) return 0;
if(var.x + var.lung >= m) return 0;
if(var.y + var.lung >= n) return 0;
if(numere_distincte(var) > k ) return 0;
return 1;
}
void back(raspuns var)
{
if ( var.x < m-rasp.lung +1 )
{if(var.lung <1)
{var.y++;
if(var.y>m)
{var.y=0;
var.x++;}
var.lung = min(m-var.x,n-var.y);
}
if(valid (var))
rasp.set(var);
var.lung--;
back(var);
}
;}
int main(int argc, char *argv[])
{
ifstream in_file("submatrix1.in");
ofstream out_file("submatrix1.out");
in_file>>m>>n>>k;
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
in_file>>a[i][j];
raspuns var;
var.set(0,0,0);
back(var);
out_file << rasp.lung;
in_file.close();
out_file.close();
}
edit: mda, codul nu merge, fac debugging acuma...
edit2: lol, codul mergea bine, gresisem eu ca denumisem fisieru submatrix.in si nu submatrix1.in si nu imi vedea fisierul , mama ce bula sunt...
oricum, am un program care sa poata genera un fisier de intrare...
Cod:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
int main(int argc, char *argv[])
{
int m,n,k,i,j;
ofstream out_file("submatrix1.in");
srand ( time(NULL) );
cout<< "introdu valoarea lui m: ";
cin>>m;
cout<< "introdu valoarea lui n: ";
cin>>n;
cout<< "introdu valoarea lui k: ";
cin>>k;
out_file << m << " " << n << " " << k << endl;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
out_file << abs(rand() % 10) << " ";
out_file << endl;}
cout << "Done!"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}