The program is visiting already visited spots and counts it as next move
You need to maintain a container of already visited locations. I'd suggest a std::unordered_set

https://cplusplus.com/reference/unor...unordered_set/

insert only works if the value to be inserted doesn't already exist and it's easy to determine if an insert worked/failed or if a value already exists or not.

If you have a struct for the position

Code:
struct Pos {
    int i;
    int j;
};
then you could have for the unordered_set

Code:
std::unordered_set<Pos> used;
So every move is inserted into this and if the insert failed then you know it's a duplicate.