This document presents a branch and bound algorithm for solving the maximum clique problem based on modeling it as an equivalent quadratic zero-one programming formulation. The algorithm uses dynamic variable selection to order the branching tree. Two different rules for selecting vertices/variables are compared: 1) a greedy approach that selects high connectivity vertices first, and 2) a non-greedy approach that selects low connectivity vertices first. While the greedy approach finds a maximum clique solution sooner, the non-greedy approach typically verifies optimality with a smaller search tree. Computational results on randomly generated graphs with up to 1000 vertices and 150,000 edges demonstrate the effectiveness of the algorithms.