Hi!
I would divide this problem into a double solution:
FIRST: I would simply make a practical solution for where to put the entrances and exits to each room: Make each of the 4 walls in the room have 5 "parts":
1 2 3 4 5
_ _ _ _ _
| | 1
| (This | 2
| is a | 3
| room) | 4
|_ _ _ _ _| 5
This way, you can simply remove one part to connect with an adjacent room. Of course, you can divide each wall into 7, or 9 parts, or whatever number you wish, depending on the size of your character and how you want the game to feel. In any case, I think odd numbers will work better (3, 5, 7, 9...).
====================
And SECOND: Design every room to have ONLY entrances, and no exits. Wait- what? Yup! That's what I said.
Then, when you start the game, every room will check for the entrances to the rooms around it, and will create exits from itself into those rooms, by removing the corresponding wall "parts" which I told you about in the first point. This should be done at runtime, of course, during the execution of the game.
Hope this helps! Happy coding!