Показать сообщение отдельно

  #6  
Старый 01.04.2009, 18:05
KaZ@NoVa
Постоянный
Регистрация: 05.07.2008
Сообщений: 555
С нами: 9394886

Репутация: 1467


По умолчанию

Код HTML:
#include<stdio.h>

int col[8];
int up_free[15];
int dn_free[15];
int coln[8];

void addqueen(){
 int i,c,r;
 static int comb, row = -1;
 row++;
 //Проверяем все колонки
 for (i = 0; i <= 7; i++){
  //Если колонка не находится под ударом
  if ( col[i] && up_free[i+row] && dn_free[row-i+7]){
   //Запоминаем что в строке есть ферзь
   coln[row] = i;
   //Маркируем колонку и обе диагонали
   col[i] = 0;
   up_free[i+row] = 0;
   dn_free[row-i+7] = 0;
   //Если все строки мы уже запомнили, то выводим комбинацию
   if (row >= 7){
    comb++;
    printf("\n\nCombination number - %d\n",comb);
    for (r = 0; r <= 7; r++){
     printf("\n");
     for (c = 0; c <=7; c++){
      if (c == coln[r]){
       printf("@");
      }
      else{
       printf("-");
      }
     }
    }
   }
   else{
    addqueen();
   }
   //Снимаем метку с колонки и диагонали
   col[coln[row]] = 1;
   up_free[row+coln[row]] = 1;
   dn_free[row-coln[row]+7] = 1;
  }
 }
 //Переходим к следующему варианту
 row--;
}

int main(){
 int i;
 for (i = 0; i <= 7; i++){
  col[i] = 1;
 }
 for (i = 0; i<= 14; i++){
  up_free[i] = dn_free[i] = 1;
 }
 addqueen();
 return 0;
}
прогу писал давно - так что щас не думал, просто перевёл с одного языка на другой.
исходник. нужно только скомпилировать и запустить)
 
Ответить с цитированием