O chestie simpla ce ai putea sa o faci ar fi sa ai x = st[k] ca sa nu tot faci calculul adresei lui st[k] de atatea ori, probabil asta o sa te ajute putin, cat despre chestia cu implementarea iterativa sau recursiva nush daca te ajuta implementarea iterativa cu ceva, fa niste comparatii intre implementari pe calculatorul tau nu schimba o chestie doar pentru ca ai auzit ca merge mai bine altfel, convinge-te singur ce merge si ce nu. Alta chestie ar fi expresia
diag[st[k]-k+n]!=val1 || diag2[k+st[k]]!=val1 || coloana[st[k]]!=val1
in care obligi programul sa evalueze toate trei expresiile iar schimband in
!(diag[st[k]-k+n]==val1 && diag2[k+st[k]]==val1 && coloana[st[k]]==val1)
programul se opreste la prima expresie evaluata la false. Pentru rapiditate poti face acelasi algoritm de doua ori: o data cu scrierea primelor trei solutii si o data cu numararea solutiilor, ca sa nu faci if (gasite < 3) de atatea ori. Nu m-am uitat pe codu tau ca sa il inteleg ... astea sunt sugestii asa dintr-o privire fugara. (super tare handle .... )