восемь ферзей
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
восемь ферзей - 2006-10-22 16:54:14.696666
|
|
|
NGP
Сообщений: 91
Оценки: 0
Присоединился: 2006-07-17 22:20:45
|
Знаю,что глупая просьба,но все же. Помогите решить задачу о восьми ферзях на msvc++, нормального решения в инете я не нашел,нужно тока,чтобы она все возможные варианты сразу выводила в консоль. Если кто возьмется,пишите комменты,плиииз!
|
|
|
RE: восемь ферзей - 2006-10-22 18:33:58.100000
|
|
|
nixo
Сообщений: 213
Оценки: 0
Присоединился: 2006-06-25 20:22:26
|
это читал ? http://algolist.manual.ru/maths/combinat/queens.php
|
|
|
RE: восемь ферзей - 2006-10-22 19:37:06.663333
|
|
|
NGP
Сообщений: 91
Оценки: 0
Присоединился: 2006-07-17 22:20:45
|
type Index=1..N; Rasstanovka=array [Index] of 0..N; как это на с++ перевести???
|
|
|
RE: восемь ферзей - 2006-10-23 00:29:10.413333
|
|
|
Freackazoid
Сообщений: 47
Оценки: 0
Присоединился: 2006-04-30 23:39:27
|
int *Rasstanovaka=new int[N]; По крайней мере мне так кажеться, неплохобы поподробнее
|
|
|
RE: восемь ферзей - 2006-10-23 10:18:25.446666
|
|
|
NGP
Сообщений: 91
Оценки: 0
Присоединился: 2006-07-17 22:20:45
|
вот подробнее,все остальное я сам смогу перевести,мне именно кусок с type надо program Queens; const N=8; type Index=1..N; Rasstanovka=array [Index] of 0..N; var X:Rasstanovka; Count:word; function P(var X:Rasstanovka;k,y:Index):boolean; var i:Index; begin i:=1; while (i<k)and(y<>X)and(abs(k-i)<>abs(y-X)) do inc(i); P:=i=k end; procedure Backtracking(k:Index); var i,y:Index; begin for y:=1 to N do if P(X,k,y) then begin X[k]:=y; if k=N then begin for i:=1 to N do write(X);writeln;inc(Count) end; Backtracking(k+1) end end; begin Count:=0; writeln('Расстановки ',N,' ферзей:'); Backtracking(1); writeln('Всего ',Count,' расстановок') end.
|
|
|
RE: восемь ферзей - 2006-10-24 00:31:41.523333
|
|
|
H@ns
Сообщений: 52
Оценки: 0
Присоединился: 2005-12-09 00:54:03
|
У меня есть прога, только на Borland Pascal 7.0. В графическом варианте выводит все расстановки.
|
|
|
RE: восемь ферзей - 2006-10-24 17:39:10.240000
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
#include <iostream> const int N = 8; unsigned int count = 0; int x[N] = { 0 }; bool p(int x[], int k, int y) { int i = 0; while(i < k && y != x && abs(k - i) != abs(y - x)) ++i; return i == k; } void back_tracking(int k) { for(int y = 0; y < N; ++y) { if(p(x, k, y)) { x[k] = y; if(k == N - 1) { for(int i = 0; i < N; ++i) { std::cout << x + 1; } std::cout << std::endl; ++count; } back_tracking(k + 1); } } } int main() { std::cout << N << " queens arrangement:" << std::endl; back_tracking(0); std::cout << "Total " << count << " arrangements" << std::endl; std::cin.get(); }
|
|
|
|
|