/************************************************ Grundlegende Algorithmen mit Java, http://algorithmen-und-problemloesungen.de/ Copyright @2007-2009 by Doina Logofatu in C#: Michael Gärtner ************************************************/ using System; using System.IO; namespace Logofatu { class P07Referat { private static String FileOutputName = "referat.out"; static void Main(string[] args) { StreamWriter sw = null; try { sw = new StreamWriter(FileOutputName); Console.Write(" n = "); int n = int.Parse(Console.ReadLine()); Console.Write(" m = "); int m = int.Parse(Console.ReadLine()); int[] x = new int[n]; int xIdx = 0; int[] vMark = new int[n]; x[0] = -1; int noSol = 0; while ( xIdx >= 0 ) { int k = xIdx; bool flag = false; while ( !flag && x[k] < m - 1 ) { if ( x[k] >= 0 ) vMark[x[k]]--; vMark[++x[k]]++; flag = true; int noMarked = 0; for ( int i = 0; i <= k; i++ ) if ( vMark[i] != 0 ) noMarked++; if ( noMarked + n - 1 - k < m ) flag = false; } if ( flag ) { if ( k == n - 1 ) { foreach ( int i in x ) { sw.Write(i + 1); sw.Write(' '); } sw.WriteLine(); noSol++; } else x[++xIdx] = -1; } else { if ( x[k] >= 0 ) vMark[x[k]]--; xIdx--; } } sw.Write("Anzahl der Lösungen = "); sw.Write(noSol); } finally { if ( sw != null ) { sw.Close(); } } } } }