# Showing that a language is NP Complete (advice)

I am currently getting ready for my final exam in computational models. I know that there aren't any rules or rule of thumb to show that a language is NP-complete and each problem has its own tricks, but I am really struggling with questions where they give me a language and showing that the language is NP-complete by showing that an NPC problem is polynomial reducible to the given language.

So I wanted to ask for advice. How can I approach such problems? Are there any steps that I can take before to help me somehow? Or is it just literally figuring out which NPC problem is "closest" to the the given language and try to construct a polynomial reduction?

I'd appreciate any advice. Thank you.

Another thing to bear in mind is that, if problem $$A$$ looks like problem $$B$$, which you already know to be NP-complete, it might be possible to modify that proof to make it work for $$A$$. For example, consider 4-colourability. The easy reduction is from 3-colourability: given a graph $$G$$, add a new vertex, connect that to everything and the new graph is 4-colourable if, and only if, the original graph was 3-colourable. But, if you didn't see that and you knew the reduction from 3SAT to 3-colourability well, it probably wouldn't be very hard to modify that reduction so the four colours were "true", "false", "er, the other colour" and "gee, there are a lot of colours today".