Bài toán của chúng ta là một đồ thị có hướng G=(V,E). Cũng như trên, mỗi nút có UID của mình, tập các UID là chưa biết. Yêu cầu đặt ra là phải chọn được một
leader[4].
Để giải quyết vấn đề này, ta sử dụng tư tưởng của thuật toán LCR. Mỗi nút sẽ lưu giữ lại UID lớn nhất mà nó gặp (khởi tạo là UID của nó). Tại mỗi vòng, các nút sẽ truyền giá trị lớn nhất này lên các cạnh đi ra từ nó.
Rõ ràng tiến trình có UID lớn nhất sẽ giữ giá trị own của nó mãi mãi. Nhưng làm thế nào để tiến trình biết mình có giá trị lớn nhất. Một ý tưởng là tiến trình sẽ chờ đợi trong thời gian đủ dài đảm bảo là nó sẽ nhận được giá trị lớn hơn nếu gía trị đó tồn tại. Có thể thấy rằng thời gian đó là khoảng cách lớn nhất từ một nút trong đồ thị đến nút bất kỳ còn lại, gọi là đường kính (diameter). Như vậy chiến lược này yêu cầu phải có sẵn một số thông tin về đồ thị.
Thuật toán được mô tả như sau: Với mỗi tiến trinh i
state(i) gồm các thành phần:
own, có kiểu của UID, khởi tạo là UID của i max-id, kiểm của UID, khởi tạo là UID của i
status, có giá trị trong tập {unknown, chosen, reported}, khởi tạo là unknown.
round, kiểu interger, khởi tạo bằng 0.
msg(i): gửi thông điệp m, UID, tới láng giềng theo chiều kim đồng hồ nếu m là giá trị hiện tại của max-id; gửi thông điệp leader tới các nút nếu status=chosen.
trans(i):
Gọi thông điệp mới từ mỗi láng giềng j là m(j). If status=chosen then status:=reported
round:=round+1
max-id:=maxmaxidm( j): jinnbrs i
If round≥diam and max-id=own and status=unknown then status:=chosen Độ phức tạp: chúng ta có thể thấy ngay là độ phức tạp về thời gian là khoảng cách lớn nhất diam vòng và số lượng thông điệp là diam.|E|.