Der Schlauheitsgrad ist ungewiss, aber jedenfalls funktioniert sie.
Das ist das Wichtigste
Das ist die minimale Anzahl.
Der Graph, der da herauskommt hat interessante Eigenschaften: jeder Knoten kann nur einen Vorgänger haben (da sonst mehrere Dateien den gleichen Zielnamen hätten). Damit sollte jede ungerichteten Zusammenhangskomponent nur einen Kreis haben können.
In dem Fall könntest du mit einer Tiefensuche (finde Vorgänger, füge temporäre Umbenennung ein wenn du einen Kreis findest) vielleicht wirklich die optimale Lösung finden
Disclaimer: Graphentheorie und Bier ... das rat ich dir.