Witam, napisałem taki kod i mam pytanie czy jest możliwość jeszcze bardziej go zoptymalizować?
#include <iostream>
#include <string>
using namespace std;
string *plansza;
string pytanie;
string *odp;
unsigned long long int size, p, N, M;
void rek(long long int n, long long int m, unsigned long long int i=0)
{
if(i==size)
{
if(plansza[n][m]==pytanie[i])
{
odp[p]="TAK";
}
else
{
if(odp[p]!="TAK") odp[p]="NIE";
}
return;
}
if(n-1>=0 && pytanie[i+1]==plansza[n-1][m]) rek(n-1,m, i+1);
if(m-1>=0 && pytanie[i+1]==plansza[n][m-1]) rek(n,m-1, i+1);
if(n+1<N && pytanie[i+1]==plansza[n+1][m]) rek(n+1,m, i+1);
if(m+1<M && pytanie[i+1]==plansza[n][m+1]) rek(n,m+1, i+1);
}
void func(unsigned long long int i)
{
unsigned long long int m, n;
for(n=0;n<N;n++)
{
for(m=0;m<M;m++)
{
if(plansza[n][m]==pytanie[0])
{
rek(n,m);
if(odp[i]=="TAK") return;
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
unsigned long long int P, i;
cin>>N>>M;
plansza=new string[N];
for(i=0;i<N;i++)
{
cin>>plansza[i];
}
cin>>P;
odp=new string[P];
for(i=0;i<P;i++)
{
cin>>pytanie;
p=i;
odp[p]="NIE";
size=pytanie.size()-1;
func(i);
}
for(i=0;i<P;i++)
{
cout<<odp[i]<<endl;
}
return 0;
}