//最短路径:迪杰斯算法
void DJS(vector<vector<int>> &graph,vector<bool> &certain, vector<int> &pre,vector<int> &length,int v)
{
certain[v] = true;
pre[v] = v;
length[v] = 0;
for (int i = 0; i < graph.size() - 1; i++)
{
int min = 255;
int mark = -1;
int pre_temp = 0;
for (int j = 0; j < certain.size(); j++)
{
if (certain[j] == true)
{
for (int k = 0; k < graph[j].size(); k++)
{
if (graph[j][k] != 0 && certain[k] == false && min > (graph[j][k] + length[j]))
{
pre_temp = j;
mark = k;
min = (graph[j][k] + length[j]);
}
}
}
}
if (mark != -1)
{
certain[mark] = true;
pre[mark] = pre_temp;
length[mark] = min;
}
}
}
int main()
{
int n = 6;
vector<vector<int>> graph(n, vector<int>(n));
vector<bool> certain(n);
vector<int> pre(n);
vector<int> length(n);
for (int i = 0; i < length.size(); i++)
{
certain[i] = false;
pre[i] = -1;
length[i] = 255;
}
graph[0] = { 0, 0, 10, 0, 30, 100 };
graph[1] = { 0, 0, 5, 0, 0, 0 };
graph[2] = { 0, 0, 0, 50, 0, 0 };
graph[3] = { 0, 0, 0, 0, 0, 10 };
graph[4] = { 0, 0, 0, 20, 0, 60 };
graph[5] = { 0, 0, 0, 0, 0, 0 };
show_graph(graph);
cout << endl;
DJS(graph, certain, pre, length, 0);
for (int i = 0; i < graph.size(); i++)
{
cout << "certain[" << i << "] = " << certain[i] << " ";
cout << "pre[" << i << "] = " << pre[i] << " ";
cout << "length[" << i << "] = " << length[i] <<endl;
}
system("pause");
return 0;
}