Permutations by swapping: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Changed to Wren S/H) |
(Add Dart implementation) |
||
Line 1,145: | Line 1,145: | ||
[2, 3, 0, 1] Sign: 1 |
[2, 3, 0, 1] Sign: 1 |
||
[3, 2, 0, 1] Sign: -1 |
[3, 2, 0, 1] Sign: -1 |
||
</pre> |
|||
=={{header|Dart}}== |
|||
{{trans|Java}} |
|||
<syntaxhighlight lang="Dart"> |
|||
void main() { |
|||
List<int> array = List.generate(4, (i) => i); |
|||
HeapsAlgorithm algorithm = HeapsAlgorithm(); |
|||
algorithm.recursive(array); |
|||
print(''); |
|||
algorithm.loop(array); |
|||
} |
|||
class HeapsAlgorithm { |
|||
void recursive(List array) { |
|||
_recursive(array, array.length, true); |
|||
} |
|||
void _recursive(List array, int n, bool plus) { |
|||
if (n == 1) { |
|||
_output(array, plus); |
|||
} else { |
|||
for (int i = 0; i < n; i++) { |
|||
_recursive(array, n - 1, i == 0); |
|||
_swap(array, n % 2 == 0 ? i : 0, n - 1); |
|||
} |
|||
} |
|||
} |
|||
void _output(List array, bool plus) { |
|||
print(array.toString() + (plus ? ' +1' : ' -1')); |
|||
} |
|||
void _swap(List array, int a, int b) { |
|||
var temp = array[a]; |
|||
array[a] = array[b]; |
|||
array[b] = temp; |
|||
} |
|||
void loop(List array) { |
|||
_loop(array, array.length); |
|||
} |
|||
void _loop(List array, int n) { |
|||
List<int> c = List.filled(n, 0); |
|||
_output(array, true); |
|||
bool plus = false; |
|||
int i = 0; |
|||
while (i < n) { |
|||
if (c[i] < i) { |
|||
if (i % 2 == 0) { |
|||
_swap(array, 0, i); |
|||
} else { |
|||
_swap(array, c[i], i); |
|||
} |
|||
_output(array, plus); |
|||
plus = !plus; |
|||
c[i]++; |
|||
i = 0; |
|||
} else { |
|||
c[i] = 0; |
|||
i++; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
[0, 1, 2, 3] +1 |
|||
[1, 0, 2, 3] -1 |
|||
[2, 0, 1, 3] +1 |
|||
[0, 2, 1, 3] -1 |
|||
[1, 2, 0, 3] +1 |
|||
[2, 1, 0, 3] -1 |
|||
[3, 1, 2, 0] +1 |
|||
[1, 3, 2, 0] -1 |
|||
[2, 3, 1, 0] +1 |
|||
[3, 2, 1, 0] -1 |
|||
[1, 2, 3, 0] +1 |
|||
[2, 1, 3, 0] -1 |
|||
[3, 0, 2, 1] +1 |
|||
[0, 3, 2, 1] -1 |
|||
[2, 3, 0, 1] +1 |
|||
[3, 2, 0, 1] -1 |
|||
[0, 2, 3, 1] +1 |
|||
[2, 0, 3, 1] -1 |
|||
[3, 0, 1, 2] +1 |
|||
[0, 3, 1, 2] -1 |
|||
[1, 3, 0, 2] +1 |
|||
[3, 1, 0, 2] -1 |
|||
[0, 1, 3, 2] +1 |
|||
[1, 0, 3, 2] -1 |
|||
[3, 0, 1, 2] +1 |
|||
[0, 3, 1, 2] -1 |
|||
[1, 3, 0, 2] +1 |
|||
[3, 1, 0, 2] -1 |
|||
[0, 1, 3, 2] +1 |
|||
[1, 0, 3, 2] -1 |
|||
[2, 0, 3, 1] +1 |
|||
[0, 2, 3, 1] -1 |
|||
[3, 2, 0, 1] +1 |
|||
[2, 3, 0, 1] -1 |
|||
[0, 3, 2, 1] +1 |
|||
[3, 0, 2, 1] -1 |
|||
[3, 1, 2, 0] +1 |
|||
[1, 3, 2, 0] -1 |
|||
[2, 3, 1, 0] +1 |
|||
[3, 2, 1, 0] -1 |
|||
[1, 2, 3, 0] +1 |
|||
[2, 1, 3, 0] -1 |
|||
[2, 1, 0, 3] +1 |
|||
[1, 2, 0, 3] -1 |
|||
[0, 2, 1, 3] +1 |
|||
[2, 0, 1, 3] -1 |
|||
[1, 0, 2, 3] +1 |
|||
[0, 1, 2, 3] -1 |
|||
</pre> |
</pre> |
||