Uva872-Ordering

来源:互联网 发布:it技术 编辑:程序博客网 时间:2024/06/05 19:13

排列组合问题,stl的next_permutation搞定

#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 100;bool mat[maxn][maxn];int main(){int ncase;cin >> ncase;getchar();int T = 1;vector<char> vv;while(ncase--){    getchar();    if(!T) {    cout<<endl;    }    T = 0;vv.clear();memset(mat,0,sizeof(mat));string st;getline(cin,st);for(int i = 0; i < st.size();i +=2){vv.push_back(st[i]);//cout<<st<<endl;    }    sort(vv.begin(),vv.end());    getline(cin,st);    for(int i = 0; i < st.size(); i += 4){    mat[st[i+2]-'A'][st[i]-'A'] = 1;    //cout<<i+2<<"  "<<i<<endl;    //cout<<st[i+2]<<"  "<<st[i]<<endl;    }    int cnt = 0;    do{    bool flag = 1;for(int i = 0; i < vv.size(); i++){    for(int j = i+1; j < vv.size(); j++){    if(mat[vv[i]-'A'][vv[j]-'A']){    flag = 0;    break;    }    }    }    if(flag){    cnt++;    for(int i = 0; i < vv.size()-1; i++){    cout<<vv[i]<<" ";    }    cout<<vv[vv.size()-1]<<endl;    }    }while(next_permutation(vv.begin(),vv.end()));     if(cnt == 0){    cout<<"NO"<<endl;    }        }}/*2A B F GA<B B<FA B F GA<B B<F*/


原创粉丝点击