|
MAXimal | |
���������: 10 Jun 2008 19:39 ���������� [������] �������� ������ ���������� ���������� ����� �� �������� ������� �� ���� ��������� ����������� ��� ���� � N ��������� � M �������, ��� ������� �� ������� ������ ��� ��� Li. ����� ���� ��������� ������� V0. ��������� ����� ���������� ���� �� ������� V0 �� ���� ��������� ������. �������� ������ ������ ��� ������ ������ ���������� (�� ������ ����������� � �������� ������ ��. ����). ������������� ������ D[1..N] ����� ��������� ������� ���������� ����� �����, �.�. Di - ��� ������� ����� ����������� ���� �� ������� V0 �� ������� i. ���������� ������ D �������� ���������� "�������������", ����� DV0 = 0. �� ��������� ������ ��������� ���� ������ ����� ��������� ������������� ���������� ����������. ����� ������ P[1..N] �������� ������� �������, �.�. Pi - ��� �������, �������������� ������� i � ���������� ���� �� ������� V0 �� i. ��� �� ��� � ������ D, ������ P ���������� ���������� �� ���� ��������� � � ����� ��� ��������� ������������� ��������. � ������ ���������� ��� �������� ������. �� ������ ���� �������������� ��� ��������� ������:
������� � ��������� M1 �������� � ���� ��������������� ������� (deque). � ���������� ��� ������� ���������� � ��������� M2, ����� ������� V0, ������� ���������� � ��������� M1. �� ������ ���� ��������� �� ���� ������� �� ��������� M1 (������ ������� ������� �� �������). ����� V - ��� ��������� �������. ��������� ��� ������� �� ��������� M0. ����� ������������� ��� ����, ��������� �� ���� �������. ����� T - ��� ������ ����� �������� ����� (�.�. �� ������ V), � L - ��� ����� �������� �����.
����������, ��� ������ ���������� ������� D ������� ��������� � �������� � ������� P. ����������� ������������������ ������ ID[1..N], � ������� ��� ������ ������� ����� �������, ������ ��������� ��� �����������: 0 - ���� M2 (�.�. ���������� ����� �������������), 1 - ���� M1 (�.�. ������� ��������� � �������), � 2 - ���� M0 (��������� ���� ��� ��� ������, ���������� ������ �������������). ������� ��������� ����� ����������� ����������� ���������� ������ deque. ������ ���� ����� ����������� ������. ��-������, ��������, � ������� � ����� ������ ������� ����� ��������� �������� N ���������. ��, ��-������, �� ����� ��������� �������� � � ������, � � ����� �������. �������������, �� ����� ������������ ������� �� ������� ������� N, ������ ����� ��������� ���. �.�. ������ ������ Q[1..N], ��������� (int) �� ������ ������� QH � �� ������� ����� ���������� QT. ������� �����, ����� QH == QT. ���������� � ����� - ������ ������ � Q[QT] � ���������� QT �� 1; ���� QT ����� ����� ����� �� ������� ������� (QT == N), �� ������ QT = 0. ���������� � ������ ������� - ��������� QH �� 1, ���� ��� ����� �� ������� ������� (QH == -1), �� ������ QH = N-1. ��� �������� ��������� � �������� �� �������� ����. �������������� �� �������� �����-����� ������� ��������������� ������ ����� ���������. � �������� ������ ������ O (N M) � �������� ���������. ������ �� �������� ��������� �������������� ���� ����� ������: ����� ��� ������ � �������� ��� O (M log N), ����, ���������, ��� ������������� ����������������� ������. ����������typedef pair<int,int> rib;
typedef vector < vector<rib> > graph;
const int inf = 1000*1000*1000;
int main()
{
int n, v1, v2;
graph g (n);
... ������ ����� ...
vector<int> d (n, inf);
d[v1] = 0;
vector<int> id (n);
deque<int> q;
q.push_back (v1);
vector<int> p (n, -1);
while (!q.empty())
{
int v = q.front(), q.pop_front();
id[v] = 1;
for (size_t i=0; i<g[v].size(); ++i)
{
int to = g[v][i].first, len = g[v][i].second;
if (d[to] > d[v] + len)
{
d[to] = d[v] + len;
if (id[to] == 0)
q.push_back (to);
else if (id[to] == 1)
q.push_front (to);
p[to] = v;
id[to] = 1;
}
}
}
... ����� ���������� ...
}
� � � �
| |