#define INF 99999
typedef struct Graphic{
int size;
int **matrix;
};
/*************** 最短路径 ***************/
//start指起点,
//dist[i]记录源点到i点的最短路径
//prev[i]记录在特殊路径当中i点的前一个点
//Graphic *g就是无向图的结构体(邻接矩阵)
void Dijkstra(int start,int dist[],int prev[], Graphic *g){
int i,j, min;
int size = g->size;
int **cost = g->matrix;
bool *visited = new bool[size];
for (i=0;i<size;++i){
dist[i] = INF;
visited[i] = false;
prev[i] = dist[i]==INF ? -1 : start;
}
//初始时从源点出发
dist[start] = 0; visited[start] = true;
for (i=0; i<size-1; ++i){
min = INF;
int u = start;
for (j=0;j<size;++j){
if ((!visited[j])&&(dist[j]<min)){
u = j;
min = dist[j];
}
}
visited[u] = true;
for (j=0; j<size; ++j){
if ((!visited[j])&&cost[u][j]<INF){
//distance为从源点到该点的最短路径
int distance = dist[u] + cost[u][j];
if (distance<dist[j]){
dist[j] = distance;
prev[j] = u;
}
}
}
}
//释放空间
delete visited;
}
最短路径算法——邻接距阵
最新推荐文章于 2023-05-20 14:52:31 发布