Aufzählen von Rasterpunkten in der 2D-Ebene in absteigender Reihenfolge von (x * y)

GegebenN > 0 undM > 0Ich möchte alle (x, y) Paare so aufzählen, dass 1 <= x <= N und 1 <= y <= M in absteigender Reihenfolge von (x * y). Ein Beispiel: Bei N = 3 und M = 2 sollte die Aufzählungsfolge sein:

1. (3, 2) -- 3 * 2 = 6
2. (2, 2) -- 2 * 2 = 4
3. (3, 1) -- 3 * 1 = 3
4. (2, 1) -- 2 * 1 = 2
5. (1, 2) -- 1 * 2 = 2
6. (1, 1) -- 1 * 1 = 1

Die Reihenfolge von(2, 1) und(1, 2) könnte getauscht werden. Eine naheliegende Möglichkeit besteht darin, sie alle aufzulisten und in a einzufügenvector<pair<int, int> >, und Ruf anstd::sort() mit meiner eigenen Vergleichsfunktion. Da jedoch N und M groß sein können und ich die meiste Zeit nur die ersten Terme der Sequenz benötige, hoffe ich, dass es einen intelligenteren Weg gibt, eine solche Sequenz zu generieren, anstatt sie all-and-sort zu generieren erfordert so viele wieN*M Array-Elemente.

Aktualisieren: Ich habe vergessen zu erwähnen, dass, obwohl ich die meiste Zeit nur die ersten Begriffe benötige, die Anzahl der erforderlichen Begriffe vor der Aufzählung unbekannt ist.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage