Pagini recente » Cod sursa (job #2806877) | Cod sursa (job #2072101) | Cod sursa (job #2723132) | Cod sursa (job #2605204) | Cod sursa (job #1411797)
/* recursiv
#include <iostream>
#include <fstream>
using namespace std ;
ifstream f("permutari.in");
ofstream g("permutari.out");
int n , x[20], uz[20] ;
int valid(int k) ;
void afisare(int k) ;
void backtracking(int k) ;
int main()
{
f >> n ;
backtracking ( 1 ) ;
return 0 ;
}
void backtracking ( int k )
{
for ( int i = 1 ; i <= n ; ++i )
if ( !uz[i] )
{
x[k] = i ;
uz[i] = 1 ;
if ( k == n )
afisare ( k ) ;
else
backtracking( k + 1 ) ;
uz[i] = 0 ;
}
}
int valid( int k )
{
for ( int i = 1 ; i <= k - 1 ; ++i)
if ( x[i] == x[k] )
return 0 ;
return 1 ;
}
void afisare( int k )
{
for ( int i = 1 ; i <= k ; ++i )
g << x[i] << " " ;
g << "\n" ;
}
*/
// iterativ
#include <iostream>
#include <fstream>
using namespace std ;
ifstream f("permutari.in");
ofstream g("permutari.out");
int main()
{
int p[100] , n , i , k , poz , min , j ;
f >> n ;
for( i = 1 ; i <= n ; ++i )
p[i] = i ;
for( i = 1 ; i <= n ; ++i )
g << i << " " ;
g << "\n" ;
do
{
poz = n ;
while ( p[poz] < p[poz-1] && poz > 1 )
--poz ;
--poz ;
if( poz )
{
min = p[poz+1] ;
j = poz + 1 ;
for( i = poz + 1 ; i <= n ; ++i )
if( min > p[i] && p[i] > p[poz] )
min = p[i] , j = i ;
k = p[poz] ;
p[poz] = p[j] ;
p[j] = k ;
for( i = 1 ; i <= ( n - poz ) / 2 ; ++i )
k = p[poz+i] , p[poz+i] = p[n-i+1] , p[n-i+1] = k ;
for( i = 1 ; i <= n ; ++i )
g << p[i] << " " ;
g << "\n" ;
}
}while( poz ) ;
}