如何在python中确定列表排列的按位和(&)



如何确定列表的排列和arri&arri+1,其中&是按位和(&(

假设我们有一个列表[1,2,3],我们需要找到这个列表的所有排列,然后我们会发现是否有任何排列的arri&arri+1是否大于0。如果是,我们将只打印该列表。

如果你提到这个问题,那么一个可能的解决方案是使用回溯。不过,我相信还有一种更快的方法。

#include <bits/stdc++.h> 
using namespace std;
bool beautifulPermutations(vector<int> cur,set<int> used,int n){
if(cur.size() == n){
for(auto x:cur){
cout<<x<<" ";
}
cout<<endl;
return true;
}
for(int i=1;i<=n;i++){
if(used.find(i) == used.end()){
if(cur.size() == 0 || (((int)cur.back() & i) > 0)){
cur.push_back(i);
used.insert(i);
bool res = beautifulPermutations(cur,used,n);
if(res)
return true;
int x = cur.back();
cur.pop_back();
used.erase(x);

}
}
}
return false;
}
int main(){
int t;
cin>>t;
while(t-->0){
int n;
cin>>n;
vector<int> v;
set<int> s;
if(!beautifulPermutations(v,s,n))
cout<<-1<<endl;
}
}

最新更新