寻路算法A*和Dijkstra

网上找了很多A*和Dijkstra算法的解析,很多都很难理解,下面这两篇非常清晰。
A*算法http://blog.csdn.net/zgwangbo/article/details/52078338
Dijkstra(迪杰斯特拉)算法http://blog.csdn.net/mu399/article/details/50903876

/*************************************************************************
    > File Name: Dijkstra.cpp
    > Author: 
    > Mail: 
    > Created Time: 2017年07月05日 星期三 20时21分59秒
 ************************************************************************/
#define MAX 256
#include
#include
using namespace std;
typedef struct graph
{
    char vex[MAX];
    int vexnum;
    int edgnum;
    int matrix[MAX][MAX];
}Graph,*PGraph;
typedef struct EdgeData
{
    char start;
    char end;
    int weight;
}EData;
void dijkstra(Graph G,int vs,int prev[],int dist[])
{
    int i,j,k;
    int min;
    int flag[MAX];
    //初始化
    for(i=0;i0;  //顶点i是否获取到最短路径
        prev[i]=0;  //顶点i的前驱顶点
        dist[i]=G.matrix[vs][i]; //顶点i的最短路径为vs到i的权
    }
    flag[vs]=1;
    dist[vs]=0;
    //遍历所有顶点(起点除外)
    for(i=1;i//在未获取最短路径的集合中,寻找权最低的顶点k
        min=INT_MAX;
        for(j=0;jif(flag[j]==0&&dist[j]1;
        //修正当前最短路径和前驱顶点
        for(j=0;jint tmp=(G.matrix[k][j]==INT_MAX?INT_MAX:(min+G.matrix[k][j]));
            if(flag[j]==0&&(tmp// 打印dijkstra最短路径的结果
    printf("dijkstra(%c): \n", G.vexs[vs]);
    for (i = 0; i < G.vexnum; i++)
        printf("  shortest(%c, %c)=%d\n", G.vexs[vs], G.vexs[i], dist[i]);

}

你可能感兴趣的:(算法,算法,dijkstra,A-star)