[All links below are Wikipedia pages.]
1) Depth-first search or breadth-first search works. For more info, see this.
2) See this. If the edges are unweighted, then breadth-first search works. Otherwise, Dijkstra's algorithm is the natural generalization.
3) According to this, the problem is NP-hard. I don't know much about this, so maybe someone else can comment.