Situatie
Se citeste o matrice nXm care contine litere mici si apoi un cuvant s. Gasiti cel mai lung prefix al cuvantului s care se poate construi cu literele din matrice prin deplasare paralela cu liniile si coloanele matricii fara a trece de doua ori prin aceeasi litera.
Exemplu:
5 6
axsads
aanama
nnaair
asdydi
sedrft
anamariana
prefixul este anamaria
Solutie
<code='c++'>#include<fstream> using namespace std; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; char a[100][100],s[50]; int n,m,i,j,maxx; ifstream f("r.in"); ofstream fout("r.out"); int inside(int i,int j) { return i>=1 && i<=n && j>=1 && j<=m; } void lee(int i,int j) { int k,inou,jnou,pas=1,gasit; int b[100][100]={0}; b[i][j]=1; do { gasit=0; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(a[i][j]==s[pas-1] && b[i][j]==pas) for(k=0;k<4;k++) { inou=i+dx[k]; jnou=j+dy[k]; if(inside(inou,jnou) && a[inou][jnou]==s[pas] && b[inou][jnou]==0) { gasit=1; b[inou][jnou]=pas+1; } } pas++; } while(gasit); if(pas-1>maxx) maxx=pas-1; } int main() { f>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) f>>a[i][j]; f>>s; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(a[i][j]==s[0]) { lee(i,j); } for(i=0;i<maxx;i++) fout<<s[i]; return 0; } //sau cu coada #include<fstream> using namespace std; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; struct poz { int i,j;}; char a[100][100],s[1000]; int n,m,i,j,maxx; ifstream f("r.in"); ofstream fout("r.out"); int inside(int i,int j) { return i>=1 && i<=n && j>=1 && j<=m; } void lee(int i, int j) { int k,inou,jnou,pas=1,st,dr,gasit; poz x[10000]; int pus[100][100]={0}; x[1].i=i; x[1].j=j; st=dr=1; do { gasit=0; i=x[st].i; j=x[st].j; for(k=0;k<4;k++) { inou=i+dx[k]; jnou=j+dy[k]; if(inside(inou,jnou) && a[inou][jnou]==s[pas] && !pus[inou][jnou]) { dr++; pus[inou][jnou]=1; x[dr].i=inou; x[dr].j=jnou; gasit=1; } } if(gasit) pas++; st++; } while(gasit || st<=dr); if(pas>maxx) maxx=pas; } int main() { f>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) f>>a[i][j]; f>>s; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(a[i][j]==s[0]) lee(i,j); for(i=0;i<maxx;i++) fout<<s[i]; return 0; }</code='c++'>
Leave A Comment?