Cod sursa(job #1113073)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 20 februarie 2014 12:13:05
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.89 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int fact(int a)
{
    if(a == 1) return 1;
    return fact(a-1)*a;
}
int main()
{
    ifstream fin("permutari.in");
    ofstream fout("permutari.out");
    int n, min, k = 0;
    fin>>n;
    int arr[n], temp[n];
    bool check[n];
    for(int i=0; i< n; i++) arr[i] = i+1;
    for(int i=0; i< n; i++) fout<<arr[i]<<" ";
    fout<<endl;
    for(int r = 0; r< fact(n)-1; r++)
    {
    for(int i= n-1; i > 0; i--)
    {
            if(arr[i] > arr[i-1])
            {
                      k = 0;
                      for(int j = 0; j< n; j++) check[arr[j] - 1] = 0;
                      for(int j = 0; j< i; j++) check[arr[j] - 1] = 1;
                      for(int j = 0; j< n; j++) temp[j] = -1;
                      check[arr[i-1]-1] = 0;
                      min = arr[i];
                      for(int j = i; j< n; j++)
                      {
                              if(arr[j] < min && arr[j] > arr[i-1]) min = arr[j];
                      }
                      arr[i-1] = min;
                      for(int j = 0; j< i; j++) fout<<arr[j]<<" ";
                      check[min - 1] = 1;
                      for(int j = 0; j< n; j++)
                      {
                              if(check[j] == 0) {temp[k] = j+1;k++;}
                      }
                      sort(temp, temp + n-1);
                      for(int j =0; j< n; j++)
                      {
                              if(temp[j] != -1)
                              {
                                         fout<<temp[j]<<" ";
                                         arr[i] = temp[j];
                                         i++;
                              }
                      }
                      fout<<endl;
                      break;
            }
    }
    }
    return 0;
}