Cod sursa(job #55166)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 26 aprilie 2007 17:19:31
Problema Dame Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream.h>
#include<math.h>


int s[20], n,k;
// k=nivelul curent -- care se construieste.

int succesor()
{
  if (s[k]<n)
    {
      s[k]++;
      return 1;
    }
   else return 0;
}

// s[linie]=coloana

int valid()
{
  int i;
  for (i=1; i<=k-1; i++)
    if (s[k]==s[i] || k-i==abs(s[k]-s[i])) return 0;
    //   ac coloana    ac diag
  return 1;
}
  ofstream out("dame.out");
void afis ()
{

  int contor=0;
  for (int i=1; i<=n; i++)
   {
     for (int j=1; j<=n; j++)
       if (s[i]==j) contor++;
   }
   out<<contor<<'\n';
  for (i=1; i<=n; i++)
   {
     for (int j=1; j<=n; j++)
       if (s[i]==j) out<<i<<" "<<j<<'\n';

   }

}

void back()

{
  k=1;
  s[k]=0;
  int oks, okv;
  while (k>0)
    {
      do {
	   oks=succesor();
	   if (oks) okv=valid();
	 }  while (oks && !okv);
      if (oks)
	 if (k==n) { afis (); return;}
	   else
	     {
	       k++;
	       s[k]=0;
	     }
       else k--;
    }
}




int main()
{
  ifstream in("dame.in");
  in>>n;
  back();
  return 0;
}