1976.迪杰斯特拉c语言算法实现
迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的。是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题。
c语言算法实现如下:
void dihskstra(int **graph,int n,int start,int end,int *mincostarr){
int cost=0;
int po=0;
int vit[n];
int costsum[n];
costsum[0]=0;
for(int i=0;i<n;i++){
mincostarr[i]=10000000;
vit[i]=0;
}
mincostarr[0]=0;
for(int i=0;i<n;i++){
int po=-1;
for (int j = 0; j < n; j++) {
if (vit[j]==0 && (po == -1 || mincostarr[j] < mincostarr[po])) po = j;
}
vit[po]=1;
for(int j=0;j<n;j++){
if(graph[po][j]!=0){
mincostarr[j]=fmin(mincostarr[j],graph[po][j]+mincostarr[po]);
}
}
printf("||");
}
for(int i=0;i<n;i++){
printf("%d ",mincostarr[i]);
}
}
int countPaths(int n, int** roads, int roadsSize, int* roadsColSize){
int **graph=(int **)malloc(sizeof(int *)*n);
int *mincostarr=(int *)malloc(sizeof(int )*n);
for(int i=0;i<n;i++){
graph[i]=(int *)malloc(sizeof(int )*n);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
graph[i][j]=0;
}
}
for(int i=0;i<roadsSize;i++){
graph[roads[i][0]][roads[i][1]]=roads[i][2];
}
// for(int i=0;i<n;i++){
// for(int j=0;j<n;j++){
// printf("%d ",graph[i][j]);
// }
// }
dihskstra(graph,n,0,n-1,mincostarr);
return 0;
}