MAXimal

���������: 10 Jun 2008 19:17
�������������: 25 May 2012 14:18

���������� [������]

����� � ������

����� � ������ (����� � ������, breadth-first search) — ��� ���� �� �������� ���������� �� ������.

� ���������� ������ � ������ ��������� ���� ���������� ����� � ������������ �����, �.�. ����, ���������� ���������� ����� ����.

�������� �������� �� O (n+m), ��� n — ����� ������, m — ����� ����.

�������� ���������

�� ���� ��������� ������� �������� ���� (������������), � ����� ��������� ������� s. ���� ����� ���� ��� ���������������, ��� � �����������������, ��� ��������� ��� �� �����.

��� �������� ����� �������� ��� ������� "����������" �����: �� ������� ���� ��������� ������ ������� s. �� ������ ��������� ���� ����� � ������ ��� ������� ������� �������������� �� ���� � �������; �.�. �� ���� �������� ��������� ���������� ���������� "������ ����" � ������ �� ������� (������ � �������� ���������).

����� ������ ��� ����� ����������� ��������� �������. �������� ������� q, � ������� ����� ���������� ������� �������, � ����� ������ ��������� ������ \rm used[], � ������� ��� ������ ������� ����� ��������, ����� ��� ��� ��� ��� (��� ����� �������, ���� �� ��� ��������).

���������� � ������� ���������� ������ ������� s, � \rm used[s] = true, � ��� ���� ��������� ������ \rm used[] = false. ����� �������� ������������ ����� ����: ���� ������� �� �����, ������� �� � ������ ���� �������, ����������� ��� ����, ��������� �� ���� �������, � ���� �����-�� �� ������������� ������ ��� �� �����, �� ������� �� � ��������� � ����� �������.

� �����, ����� ������� ��������, ����� � ������ ������ ��� ���������� �� s �������, ������ �� ������ ����� ���������� ����. ����� ����� ��������� ����� ���������� ����� (��� ���� ������ ���� ������� ������ ���� ����� d[]), � ��������� ��������� ����������, ����������� ��� �������������� ���� ���� ���������� ����� (��� ����� ���� ������� ������ "�������" p[], � ������� ��� ������ ������� ������� ����� �������, �� ������� �� ������ � ��� �������).

����������

��������� ������������� �������� �� ����� C++.

������� ������:

 
vector < vector<int> > g; // ����
int n; // ����� ������
int s; // ��������� ������� (������� ����� ���������� � ����)
 
// ������ �����
...

��� �����:

 
queue<int> q;
q.push (s);
vector<bool> used (n);
vector<int> d (n), p (n);
used[s] = true;
p[s] = -1;
while (!q.empty()) {
	int v = q.front();
	q.pop();
	for (size_t i=0; i<g[v].size(); ++i) {
		int to = g[v][i];
		if (!used[to]) {
			used[to] = true;
			q.push (to);
			d[to] = d[v] + 1;
			p[to] = v;
		}
	}
}

���� ������ ���� ������������ � ������� ���������� ���� �� �����-�� ������� \rm to, ��� ����� ������� ��������� �������:

 
if (!used[to])
	cout << "No path!";
else {
	vector<int> path;
	for (int v=to; v!=-1; v=p[v])
		path.push_back (v);
	reverse (path.begin(), path.end());
	cout << "Path: ";
	for (size_t i=0; i<path.size(); ++i)
		cout << path[i] + 1 << " ";
}

���������� ���������

  • ����� ����������� ���� � ������������ �����.

  • ����� ��������� ��������� � ����� �� O(n+m).

    ��� ����� �� ������ ��������� ����� � ������ �� ������ �������, �� ����������� ������, ���������� ����������� (\rm used=true) ����� ���������� ��������. ����� �������, �� ��������� ������� ������ � ������ �� ������ �������, �� �� �������� ������ ��� ������ \rm used[], �� ���� ���� �� ������ ��� ����� �������� ����� ���������� ���������, � ��������� ����� ������ ��������� �������� ��-�������� O(n+m) (����� ��������� �������� ������ �� ����� ��� ��������� ������� \rm used ���������� ������ ������� � ������).

  • ���������� ������� �����-���� ������ (����) � ���������� ������ �����, ���� ������ ��������� ������� ����� ����������� �������� �����, � �������� �� ������ ��������� � ������ — ������ �����.

    ������������ ������ — ����, ��� ����� ��������� �� ����, ��� ���� �� ����� ����������� �����, ����������� �� ���� �� ����, � ��������� �� ���������� ����� ����� ����������� ����� � ��������� �������. �������� ��� ������� � ������ �� �����, ��� ���������� (��������) �������� ����� ���������: ���������� ������, � ���������� ���� �������.

  • ���������� ����������� ���� � 0-1-����� (�.�. ����� ����������, �� � ������ ������� ������ 0 ���� 1): ���������� ������� �������������� ����� � ������: ���� ������� ����� �������� ����, � ���������� ��������� ���������� �� �����-�� �������, �� ��� ������� ��������� �� � �����, � � ������ �������.

  • ���������� ����������� ����� � ��������������� ������������ �����: ���������� ����� � ������ �� ������ �������; ��� ������ � �������� ������ �� �������� ����� �� ������� ������� �� ������-�� ����� � ��� ���������� �������, �� ��� ��������, ��� �� ����� ���������� ����, � ������������� ����� � ������; ����� ���� ����� ��������� ������ (�� ������ �� ������� ������� ������) �������� ����������.

  • ����� ��� ����, ������� �� �����-���� ���������� ���� ����� �������� ����� ������ (a,b). ��� ����� ���� ��������� 2 ������ � ������: �� a, � �� b. ��������� ����� d_a[] ������ ���������� ����������, ���������� � ���������� ������� ������, � ����� d_b[] — � ���������� ������� ������. ������ ��� ������ ����� (u,v) ����� ���������, ����� �� �� �� �����-���� ���������� ����: ��������� ����� ������� d_a[u] + 1 + d_b[v] = d_a[b].

  • ����� ��� �������, ������� �� �����-���� ���������� ���� ����� �������� ����� ������ (a,b). ��� ����� ���� ��������� 2 ������ � ������: �� a, � �� b. ��������� ����� d_a[] ������ ���������� ����������, ���������� � ���������� ������� ������, � ����� d_b[] — � ���������� ������� ������. ������ ��� ����� ������� v ����� ���������, ����� �� �� �� �����-���� ���������� ����: ��������� ����� ������� d_a[v] + d_b[v] = d_a[b].

  • ����� ���������� ������ ���� � ����� (�.�. ���� ������ �����). ��� ����� ���� ��������� ��������������� ����, ��������� �������� ����� ��������� (v,c), ��� v — ����� ������� �������, c = 0 \ldots 1 — ������� ��������. ����� ����� (a,b) ��������� ����� � ���� ����� ����� ����������� � ��� ����� ((u,0),(v,1)) � ((u,1),(v,0)). ����� ����� �� ���� ����� ���� ������� � ������ ����� ���������� ���� �� ��������� ������� � ��������, � ���������, ������ 0.

������ � online judges

������ �����, ������� ����� �����, ��������� ����� � ������: