Ok, so how do you create an infinite world with procedural generation?
You can't limit yourself to, say, a 64-bit int, cause that's not infinite. You could, presumably, use linked lists, but then you'd run into speed issues.
You seem to be assume the use of integers to identify the rooms. And there are many alternatives to linked lists.
A simple method would be to generate a pair of unique strings for each entrance/exit of a room. The first string would identify the current room / board, and the second string could represent the destination room. If you want to get really interesting, you can have one-way doorways, or even a different destination based on various factors. A simple hash table or an indexed database table could be used to locate the rooms. If the target string doesn't have a room associated with it, then you create a new room, save it, and then load the new room.
Just because an exit from one room takes you to a previously visited room doesn't mean the world repeats. In fact, if that never happened, the game would be boringly linear.
There is no reason that the entire world has to be in memory at one time, only the rooms where players are located. When memory gets tight, you can page out any rooms that are now empty, or perhaps where there has been no recent activity. When a new room is loaded, you can control its contents based on if the player has been there before, or if this is the first time that any player has been there within some time period. That would allow some one-time objects, others to be regenerated periodically, other items to be limited to one per party, etc.