This "look at it as a permutation problem and follow the disjoint cycles" idea is loosely what rainbow tables are based on (although I think in that case because of the possibility of hash collisions they aren't guaranteed to be disjoint cycles, which requires extra work to solve).