在非网图中,最短路径是指两顶点之间经历的边数最少的路径。路径的第一个顶点称为源点,最后一个顶点称为终点。
在网图中,最短路径是指两顶点之间经历的边上权值之和最少的路径。
Dijkstra算法用来求单源点最短路径:给定源点v,求该点到其余各个顶点的最短路径。
#include<bits/stdc++.h>
using namespace std;
const int MaxSize = 10;
string vertex[MaxSize];
int edge[MaxSize][MaxSize];
int vertexNum, edgeNum;
void MGraph(string a[], int n, int e)
{
int i, j, k, w;
vertexNum = n; edgeNum = e;
for (i = 0; i < vertexNum; i++)
vertex[i] = a[i];
for (i = 0; i < vertexNum; i++)
for (j = 0; j < vertexNum; j++)
if (i == j)
edge[i][j] = 0;
else
edge[i][j] = 1000;
for (k = 0; k < edgeNum; k++)
{
cin >> i >> j >> w;
edge[i][j] = w;
}
}
void Dijkstra(int v)
{
int i, k, num, dist[MaxSize];
string path[MaxSize];
for (i = 0; i < vertexNum; i++) h
{
dist[i] = edge[v][i];
if (dist[i] != 1000)
path[i] = vertex[v] + vertex[i];
else path[i] = "";
}
for (num = 1; num < vertexNum; num++)
{
k = Min(dist, vertexNum);
cout << path[k] << ":" << dist[k] << endl;
for (i = 0; i < vertexNum; i++)
if (dist[i] > dist[k] + edge[k][i]) {
dist[i] = dist[k] + edge[k][i];
path[i] = path[k] + vertex[i];
}
dist[k] = 0;
}
}
int Min(int r[], int n)
{
int index = 0, min = 1000;
for (int i = 0; i < n; i++)
if (r[i] != 0 && r[i] < min)
{
min = r[i]; index = i;
}
return index;
}
int main()
{
int i;
string ch[] = { "A","B","C","D","E" };
MGraph(ch, 5, 7);
Dijkstra(0);
return 0;
}