Ciao,
io ho risolto l'esercizio poco fa, dopo aver passato un bel po' di tempo a ragionare proprio sulle condizioni giuste da impostare. Forse possono aiutarti le seguenti osservazioni:
- la prima volta che trovi i pixel adiacenti, essi sono tutti "nuovi", ma già quando vai a calcolare i pixel adiacenti di questi appena trovati avrai dei pixel già trovati; magari una delle tue condizioni può essere quella di scartare questi pixel "duplicati" nelle tue successive iterazioni
- i "set" ti aiutano ad avere sequenze di elementi non duplicati
- il bordo lo puoi vedere come l'insieme di "tutti i punti connessi" meno i punti con meno di 4 pixel adiacenti
- colorare alla fine può risultare più lento, ma ti rende meno complicato scrivere il codice