On line 68 you wrote && graph[u][v] &&, but that should have been && graph[u][v] >= 0 &&
I haven't been able to check anything else because there are errors in the data.
graph[20][0] == 0 and graph[0][20] == -1, indicating that graph[source][destination] gives the cost from node <source> to node <destination>, but graph[0][1] == 0, but it should be 10 according to the picture. Also, on line 83 there's a , 1 - 1, which I'm guessing is a typo.