Hi Lewis, MATLAB provides options to change the strucure through the layout function. You can check out this page for more details. You could try out 'force' or 'subspace' arguments, see what works best for your case.
In case this is still too sparse for the graph you are implementing one method I would suggest would be to manually normalize the values in the graph while plotting and unnormalize right after, should be an easy enough workaround for the illustration part.
For the second part,assuming you want the longest distance 'on' the graph(longest edge) and not the distance between any two nodes, because that could become a NP hard problem,
Here is how you could do that:
distances = distances(G);
longest_path_length = max(distances(:));
longest_path = shortestpath(G, 1, numel(G.Nodes));