数组全排列 手动&自动

/*
手动:交换 再 交换
自动:next_permutation
*/

#include <iostream> #include <string> #include <sstream> #include <algorithm> #include <cstring> using namespace std ; int ans = 0; int check(int a[]){ if(a[0]-a[4]==-1||a[0]-a[4]==1) return 0; if(a[3]-a[4]==-1||a[3]-a[4]==1) return 0; if(a[5]-a[4]==-1||a[5]-a[4]==1) return 0; if(a[7]-a[4]==-1||a[7]-a[4]==1) return 0; if(a[8]-a[4]==-1||a[8]-a[4]==1) return 0; if(a[9]-a[4]==-1||a[9]-a[4]==1) return 0; if(a[1]-a[4]==-1||a[1]-a[4]==1) return 0; if(a[1]-a[5]==-1||a[1]-a[5]==1) return 0; if(a[1]-a[6]==-1||a[1]-a[6]==1) return 0; if(a[0]-a[5]==-1||a[0]-a[5]==1) return 0; if(a[2]-a[5]==-1||a[2]-a[5]==1) return 0; if(a[8]-a[5]==-1||a[8]-a[5]==1) return 0; if(a[9]-a[5]==-1||a[9]-a[5]==1) return 0; if(a[6]-a[5]==-1||a[6]-a[5]==1) return 0; if(a[6]-a[9]==-1||a[6]-a[9]==1) return 0; if(a[6]-a[2]==-1||a[6]-a[2]==1) return 0; if(a[3]-a[0]==-1||a[3]-a[0]==1) return 0; if(a[3]-a[7]==-1||a[3]-a[7]==1) return 0; if(a[8]-a[7]==-1||a[8]-a[7]==1) return 0; if(a[8]-a[3]==-1||a[8]-a[3]==1) return 0; if(a[9]-a[8]==-1||a[9]-a[8]==1) return 0; if(a[1]-a[0]==-1||a[1]-a[0]==1) return 0; if(a[1]-a[2]==-1||a[1]-a[2]==1) return 0; } //手动全排列 void f(int k ,int a[]){ //出口 if(k == 10){ if(check(a)!= 0 ){ ans++; } return ; } for(int i = k; i<10 ; ++i){ {int temp = a[k] ; a[k] = a[i] ; a[i] = temp ;} //深入 f(k+1,a); {int temp = a[k] ; a[k] = a[i] ; a[i] = temp ;} //回溯 } } void i2s(int x, string &basic_string) { stringstream ss; ss << x; ss >> basic_string; } void s2i(string &basic_string , int &x ) { stringstream ss; ss << basic_string; ss >> x; } void c2i(char &basic_string , int &x ) { stringstream ss; ss << basic_string; ss >> x; } void c2s(char c , string & s){ stringstream stream; stream << c; s = stream.str(); } //自动全排列 void f1(string s, int a[]){ do{ for(int i=0 ; i<10 ; ++i){ int temp ; // string temps ; // c2s (s[i],temps); // s2i(temps,temp); c2i(s[i],temp); a[i] = temp ; } check(a); }while(next_permutation(s.begin(),s.end())); } int main(){ //int a[10]={0,1,2,3,4,5,6,7,8,9}; //f(0,a); int a[10]; string s ="0123456789" ; f1(s,a); cout<<ans<<endl; }

  

猜你喜欢

转载自www.cnblogs.com/Stephen-Jixing/p/12628305.html
今日推荐