I recent(-ish)ly tackled a similar set of problems in TADS3. The basic approach I ended up using is basically to go through each room, computing the path to each other room. From this path, just remember the “next hop”, creating a hash table for the room in which the destination is the key and the next hop is the value.
For the specific case you’re describing, you’d just compute your paths using edge weights to represent pathing “preferences”: so instead of using a default weight of 1, cramped rooms have a weight of 3 and overheated rooms are 5.
Not for I7, but I implemented a fairly complete precomputed table-based routing system for TADS3/adv3, detailed in this thread. There’s a git repo for the code, linked in the thread.