Finding the shortest path (between source and destination) with the least number of edges
Naming
#define n 5
#define s 0
#define d 4

We normally use ALL_CAPS for preprocessor macros, to warn readers.
void Dijkstra(int Graph[n][n], int _n,int _s, int _d);

I'd prefer lower case for the function name and arguments (PascalCase is conventionally used for typedefs).  The identifiers beginning with underscore are risky, because they are reserved for use by your compiler and standard library; also they don't tell us anything about their meaning.  n seems to be the number of nodes; are s and d the start and target?
Separate the work from the I/O
At the moment, the Dijkstra() function both finds a route and prints it.  Well-structured code separates these two activities, so you can do other things with the route.  You'll need to define a suitable data structure to return for the route - you can start by filling in an array (remember to check bounds); perhaps move to a linked list or an allocated array.
Flexibility
At some stage, you'll want to move to supporting graphs of arbitrary size.  For that, you're going to need to change n from constant to variable, and allocate and free storage for the distances.  That will be worthy of its own review when you reach that stage.