1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| void dijkstra(int graph[][6],int len,int start){ int isshort[len]; int dis[len]; int path[len]; for(int i=0;i<len;i++){ dis[i]=graph[start][i]; if(graph[start][i]!=INF) path[i]=start; else path[i]=-1; isshort[i]=0; } isshort[start]=1; for(int i=0;i<len;i++){ int min=INF; int minindex=-1; for(int j=0;j<len;j++){ if(isshort[j]!=1&&dis[j]<min){ min=dis[j]; minindex=j; } } isshort[minindex]=1; for(int j=0;j<len;j++){ if(isshort[j]!=1&&graph[minindex][j]!=0&&min+graph[minindex][j]<dis[j]){ dis[j]=min+graph[minindex][j]; path[j]=minindex; } } } printf("dis path\n"); for(int i=0;i<len;i++) printf("%3d %3d\n",dis[i],path[i]); }
|