雑多なことを書き連ねていくブログ

今までの人生、色々と興味を持ってやってきた目線で森羅万象に言及したり、

next_permutation

ABC054

C - One-stroke Path

next_permutationを使う問題。

int main(){

  int n, m, a[30], b[30], c[10], ans=0;
  cin >> n >> m;
  for(int i=0; i<m; i++){
    cin >> a[i] >> b[i];
  }
  for(int i=0; i<n; i++){
    c[i]=i+1;
  }
  bool flag;
  do{
    if(c[0]==1){
      for(int i=0; i<n-1; i++){
        for(int j=0; j<m; j++){
          flag=false;
          if(c[i]==a[j] && c[i+1]==b[j] || c[i]==b[j] && c[i+1]==a[j]){
            flag=true;
            break;
          }
        }
        if(!flag){
          break;
        }
      }
      if(flag){
        ans++;
      }
    }
  }while(next_permutation(c, c+n));
  cout << ans << endl;

  return 0;
}

 

覚えておきたい。