Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- using namespace std;
- struct M {int lung, inizioT; M(int a=0, int b=-1){lung=a; inizioT=b;}};
- //M *x = new M(cont, x);
- //x->cont;
- int scorrP(int *T,int dimT, int * P,int dimP,int iP, int iT, int cont)
- {
- if(iP<dimP && T[iT+iP]==P[iP] && iT+iP<dimT)
- {
- cont++;
- return scorrP(T,dimT, P, dimP, iP+1, iT, cont);
- }
- else
- return cont;
- }
- M match(int *T,int dimT,int* P,int dimP, int iT, int cont, int start)
- {
- int temp_cont;
- while(iT<dimT)
- {
- if(T[iT]==P[0])
- {
- temp_cont=scorrP(T,dimT, P, dimP, 0, iT, 0);
- if(temp_cont>=cont)
- {
- cont=temp_cont;
- start=iT;
- }
- }
- return match(T,dimT, P, dimP, iT+1, cont, start);
- }
- if (cont==0)
- start=-1;
- return M (cont, start);
- }
- main()
- {
- int T[200]={}, P[20]={}, dimT, dimP;
- cin>>dimT;
- for(int i=0; i<dimT;i++)
- cin>>T[i];
- cin>>dimP;
- for(int i=0; i<dimP;i++)
- cin>>P[i];
- M x=match(T,dimT, P, dimP, 0,0,0);// funzione ricorsiva da fare
- cout<<"[lung="<<x.lung<<" inizioT="<<x.inizioT<<']'<<endl; // e' l'occasione di ridefinire << per M
- cout<<"end"<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement