Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Олимпиады

Страница: 1 |

 

  Вопрос: "Шахматные" задачи Добавлено: 08.02.05 19:53  

Автор вопроса:  Sharp | Web-сайт: sharpc.livejournal.com | ICQ: 216865379 
Постите сюда "шахматные" задачи, можно с решением на ЯВУ, можно без.

Начну первым: задача о 8 ферзях, решенная Эйлером более 200 лет назад.
Она заключается в том, что нужно расположить 8 ферзей на шахматной доске так, чтобы они не били друг друга.
Решений 92.

Вот алгоритм:

#include <stdio.h>

int f[8];
int c=0;

inline int abs(int k){
return k>=0?k:-k;
}

void putf(int s){
int i, w;
for(w=1; w<=8; w++){
for(i=1; i<s; i++){
if(f[ i]==w || abs(f[ i]-w)==s-i) break;
}
if(i==s){
f[s] = w;
if(s==8){
for(int k=1; k<=8; k++){
for(int l=1; l<=8; l++){
if(l==f[k]){
printf("1");
}
else{
printf("0");
}
}
printf("\n");
}
printf("\n");
c++;
}
else{
putf(s+1);
}
}
}
}

int main(){
for(int i=1; i<=8; i++){
f[1]=i;
putf(2);
}
printf("c = %d\n\n", c);
return 0;
}

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 11.05.05 13:58
А я вот читал, что решений 94 !!

Ответить

Номер ответа: 2
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #2
Добавлено: 11.05.05 16:19
Ага... а добавь в трёх местах пустой цикл, то будет 95. А как по мне, так перебор с возвратом - это идеальный вариант

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 11.05.05 16:40
Яндекс на моей стороне, 92 решения, 12, если не учитывать симметричные

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам