Вы должны определить правила соответствующим образом в коде Java и сделать все допустимые перестановки {1,2,3,4,5,6,7} и проверить, какие перестановки соответствуют этим правилам. Я сделал это уже здесь для другого вопроса перестановки: Как написать условие "все эти числа разные" в Java?
Адаптированный по вашим правилам код может выглядеть так:
import java.util.Arrays;
class Graph26 {
private static final int A = 0;
private static final int B = 1;
private static final int C = 2;
private static final int D = 3;
private static final int E = 4;
private static final int F = 5;
private static final int G = 6;
private final static boolean rule1(final int[] n) {
return n[A] != 2;
}
private final static boolean rule2(final int[] n) {
return n[A] + n[B] == n[F];
}
private final static boolean rule3(final int[] n) {
return n[C] - n[D] == n[G];
}
private final static boolean rule4(final int[] n) {
return n[D] + n[E] == 2*n[F];
}
private final static boolean rule5(final int[] n) {
return n[E] + n[G] == n[F];
}
private final static boolean isValid(final int[] nodes) {
return rule1(nodes) && rule2(nodes) && rule3(nodes) && rule4(nodes)
&& rule5(nodes);
}
class Permutation {
private final int[] o;
private boolean perms = true;
public boolean hasPerms() {
return perms;
}
Permutation(final int[] obj) {
o = obj.clone();
}
private int[] nextPerm() {
int temp;
int j = o.length - 2;
while (o[j] > o[j + 1]) {
j--;
if (j < 0) {
perms = false;
break;
}
}
if (perms) {
int k = o.length - 1;
while (o[j] > o[k]) {
k--;
}
temp = o[k];
o[k] = o[j];
o[j] = temp;
int r = o.length - 1;
int s = j + 1;
while (r > s) {
temp = o[s];
o[s] = o[r];
o[r] = temp;
r--;
s++;
}
}
return o.clone();
}
}
public static void main(final String[] args) {
int[] nodes = new int[] { 1, 2, 3, 4, 5, 6, 7};
final Graph26 graph = new Graph26();
final Permutation p = graph.new Permutation(nodes);
int i = 0;
while (p.hasPerms()) {
if (isValid(nodes)) {
System.out.println(Arrays.toString(nodes));
}
i++;
nodes = p.nextPerm();
}
System.out.println(i);
}
}
Это определит rules1..5 относительно правил, определенных в вопросе, и выполнит проверку всех! 7 = 5040 перестановок {1,2,3,4,5,6,7}. Вы можете увидеть это в действии здесь: https://ideone.com/wwxG0
, что приводит к (A, B, C, D, E, F, G):
[3, 2, 7, 6, 4, 5, 1]