#include<iostream>
#include<queue>
#include<stack>
using namespace std;
#define Init -1
#define Max 1000
int path[Max];
int dist[Max];
int G[Max][Max];
int collected[Max];
int Nv;//顶点
int Ne;//边
void Build()
{
int v1, v2;
cin >> Nv;
for (int i = 0; i < Nv; i++)
{
for (int j = 0; j < Nv; j++)
{
G[i][j] = 0;
}
}
for (int i = 0; i < Nv; i++)
path[i] = Init;
for (int i = 0; i < Nv; i++)
{
dist[i] = Init;
}
for (int i = 0; i < Nv; i++)
collected[i] = false;
cin >> Ne;
for (int i = 0; i < Ne; i++)
{
cin >> v1 >> v2;
G[v1][v2] = 1;
}
}
void Start(int s)
{
dist[s] = 0;
collected[s] = true;
for (int i = 1; i <= Nv; i++)
{
if (G[s][i])
{
dist[i] = G[s][i];
path[i] = s;
}
}
}
int FindMin(int s)
{
int min = 0;
for (int i = 1; i <= Nv; i++)
{
if (i != s && dist[i] < dist[min] && !collected[i])
min = i;
}
return min;
}
void Dijkstra(int s)
{
Start(s);
while (true)
{
int tmp = FindMin(s);
if (!tmp)
break;
collected[tmp] = true;
for (int i = 1; i < Nv; i++)
{
if (!collected[i] && G[tmp][i])
if (dist[tmp] + G[tmp][i] < dist[i])
dist[i] = dist[tmp] + G[tmp][i];
path[i] = tmp;
}
}
}
Dijkstra算法
最新推荐文章于 2022-05-30 16:32:34 发布