您的位置:首页 > 其它

最短路径算法——邻接距阵

2012-11-30 14:13 393 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: