c++实现Dijkstra
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int vex[4] = {0};
int path[4] = { 0 };
int data[4][4];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (i == j)
{
data[i][j] = 0;
}
else
{
data[i][j] = 1000;
}
}
}
cout << "顶点名字为0,1,2,3,图为无向图" << endl;
cout << "输入边的个数" << endl;
int edge;
cin >> edge;
cout << "起点、终点、权值以空格隔开" << endl;
int a, b, w;
for (int i = 0; i < edge; i++)
{
cin >> a >> b >> w;
data[a][b] = w;
data[b][a] = w;
}
cout << "图的初始信息" << endl;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
cout << data[i][j] << " ";
}
cout << endl;
}
for (int i = 1; i < 4; i++)
{
int k = 0;
int vmin = 1000;
if (vex[i] == 0 && data[0][i] < vmin)
{
vmin = data[0][i];
k = i;
}
vex[k] = 1;
path[k] = vmin;
for (int j = 1; j < 4; j++)
{
data[0][j] = min(data[0][j], data[0][k] + data[k][j]);
}
}
cout << "以0为例输出最短距离" << endl;
for (int i = 1; i < 4; i++)
{
cout << "0到" << i << "的最短距离" << data[0][i] << endl;
}
}