图:
直接上代码:
const int INF = 0x7fffffff >> 1;
int matrix[][6] = {{INF, INF, 10, INF, 30, 100},
{INF, INF, 5, INF, INF, INF},
{INF, INF, INF, 50, INF, INF},
{INF, INF, INF, INF, INF, 10},
{INF, INF, INF, 20, INF, 60},
{INF, INF, INF, INF, INF, INF}};
typedef int* Distance;
struct Graph
{
Graph(int verNum):vertexNumber(verNum)
{
for(int i = 0; i < 6; ++i)
for(int j = 0; j < 6; ++j)
arc[i][j] = matrix[i][j];
}
~Graph() {}
int vertexNumber;
int arc[10][10];
};
void dijsktra(Graph &G,int v0, Distance &D)
{
int *final = new int[G.vertexNumber];
int *index = new int[G.vertexNumber];
for(int i = 0; i < G.vertexNumber; ++i)
{
final[i] = false;
index[i] = 0;
}
for(int v = 0; v < G.vertexNumber; ++v)
D[v] = G.arc[v0][v];
D[v0] = 0;
for(int v = 1; v < G.vertexNumber; ++v)
{
int min = INF;
int vTem = 0;
for(int w = 1; w < G.vertexNumber; ++w)
{
if(!final[w] && D[w] < min)
{
min = D[w];
vTem = w;
}
}
final[vTem] = true;
for(int k = 1; k < G.vertexNumber; ++k)
{
if(D[k] > D[vTem] + G.arc[vTem][k])
D[k] = D[vTem] + G.arc[vTem][k];
}
}
}
运行结果: