C 忽远忽近的距离

队友的解法

看着像是枚举4种情况(-3,-2,2,3)

但代码逻辑(那个循环)那块没看懂,有没有大佬解答一下

#include <bits/stdc++.h>
using namespace std;
int a[100005]={0};
bool select(int n,int m,int a[n]){
    int p[] = {-3,-2,2,3};
    if (m == n) {
        return true;
    }
    for (int i=0;i<4;i++){
        if (m+p[i]>=0 && m+p[i]<n && a[m+p[i]] == 0){
            a[m + p[i]] = m + 1;
            if (select(n,m+1,a)) {
                return true;
            }
            a[m+p[i]]=0;//行不通
        }
    }
    return false;
}
int main(){
    int n;
    cin>>n;
    if (select(n,0,a)){
        for (int i=0;i<n;i++){
            cout<<a[i]<<" ";
        }
    }else{
        cout<<"-1";
    }  
}