找出最小的 n>1,使得存在一个存储了 [1, n] 的某个排列的循环数组,数组中任意相邻两项之和都是完全平方数。
题解:构造一个无向图,循环数组中的每一个元素作为图中的点,图中的每一个点的值与它的邻接点的值相加为平方和,利用回溯法找图中的哈密顿回路(一次经过图中的所有点(只经过一次)并能回到出发点的回路)。我们逐渐增大图的大小,找图中的哈密顿回路,第一个能找到哈密顿回路的图大小即为最小的n
class Solution {
public int getAns(){
for(int i=1;i<Integer.MAX_VALUE;i++){
map test=new map(i);
test.dfs(1,i);
if(test.ans.size()!=0) {
System.out.println(test.ans.toString());
return i;
}
}
return -1;
}
public static void main(String[] args) {
System.out.