Skakaceva tura

Moze li neko da predlozi ideju ili neki hint da mi da oko optimizacije jer vec za 6x6 treba mu previse vremena.

#include <bits/stdc++.h>
using namespace std;

#define endl "\n"
#define ll long long
#define PB push_back
#define F first
#define S second
#define all(a) a.begin(), a.end()
#define MAX 8
#define Fast ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

int tabla[MAX][MAX];
int n,m;

void printaj()
{
    for(int i=0; i<n; ++i) {
        for(int j=0; j<m; ++j) {
            if(tabla[i][j]<10) cout<<' ';
            cout<<tabla[i][j]<<' ';
        }
        cout<<endl;
    }
    cout<<endl;
}
bool safe(int i, int j)
{
    if(i>=n || i<0 || j>=m || j<0) return 0;
    if(tabla[i][j]) return 0;
    return 1;
}
void f(int i, int j, int br)
{
    tabla[i][j]=br;
    if(br==n*m) {
        printaj();
        tabla[i][j]=0;
        return;
    }
    if(safe(i+2,j+1)) f(i+2,j+1,br+1);
    if(safe(i+1,j+2)) f(i+1,j+2,br+1);
    if(safe(i-1,j+2)) f(i-1,j+2,br+1);
    if(safe(i-2,j+1)) f(i-2,j+1,br+1);
    if(safe(i-2,j-1)) f(i-2,j-1,br+1);
    if(safe(i-1,j-2)) f(i-1,j-2,br+1);
    if(safe(i+1,j-2)) f(i+1,j-2,br+1);
    if(safe(i+2,j-1)) f(i+2,j-1,br+1);
    tabla[i][j]=0;
}

int main()
{
      Fast;
      cin>>n>>m;
      f(0,0,1);
      return 0;
}

https://petlja.org/biblioteka/r/problemi/zbirka-napredni-nivo/skakaceva_tura