Mappa Antica 5/100 per tempo

per risolvere questo problema ho pensato di usare la ricorsione ma vado fuori tempo di 0.1 sec per tutte le subtask, consigli per ottimizzare?

#include <iostream>
#include <stdio.h>


using namespace std;

int mappa (int n,char p[][100],  int s,int r, int c){
	if (r==n-1 and c==n-1){
		return s+1;									//basecase
	}
	if (p[r+1][c+1]=='*' and r<n-1 and c<n-1){                          //diagonale alta dx
		return mappa(n,p,s+1,r+1,c+1);              
	}
	if (p[r+1][c-1]=='*' and r<n-1 and c>0){                          //diagonale alta sx
		return mappa(n,p,s+1,r+1,c-1);              
	}
	if (p[r+1][c]=='*' and r<n-1){				            //alto
		return mappa(n,p,s+1,r+1,c);                
	}
	if (p[r-1][c]=='*' and r>0){				            //basso
		return mappa(n,p,s+1,r-1,c);                
	}
	if (p[r][c+1]=='*' and c<n-1){                            //destra
		return mappa(n,p,s+1,r,c+1);
	}
	if (p[r][c-1]=='*' and c>0){                            //sinistra
		return mappa(n,p,s+1,r,c-1);
	}
	if (p[r-1][c+1]=='*' and r>0 and c<n-1){                          //diagonale bassa dx
		return mappa(n,p,s+1,r-1,c+1);
	}
	if (p[r-1][c-1]=='*' and r>0 and c>0){                          //diagonale bassa sx
		return mappa(n,p,s+1,r-1,c-1);              
	}

}

int main(){

	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	
	int n,r,c;
	cin>>n;
	
	r=0;
	c=0;
	char p[100][100];
	char app;
	
	while (r<n){
		cin>>app;
		p[r][c]=app;
		if (c==n-1){
			r++;
			c=-1;
		}
		c++;
	}
	int conta;
	int s=0;
	r=0;
	c=0;
	conta = mappa(n,p,s,r,c);
	
	cout<<conta;
	return 0;
}

La piattaforma di allenamento, una volta superato il tempo limite, uccide il processo; quindi anche se segna fuori tempo di 0.1 sec, molto probabilmente il tuo programma non giunge mai a termine oppure impiega un tempo spropositato.
Prova a pensare a cosa succede se esiste un ciclo:

6 
*+***+
*+*+**
*****
++++**
******