03.05.2010, 20:17 | #1 (permalink) |
Новичок
Регистрация: 03.05.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Восемь ферзей С++
#include <stdio.h> #include <conio.h> #include <stdlib.h> char check(int*A, int n) { int i,j; for (i=0; i<n; i++) for (j=0; j<n; j++) { if ((A[i]==A[j])&&(i!=j)&&(A[i]!=0))return 0; if (((A[i]+i)==(A[j]+j))&&(i!=j)&&(A[i]!=0)&&(A[j]!=0)) return 0; if (((A[i]-i)==(A[j]-j))&&(i!=j)&&(A[i]!=0)&&(A[j]!=0)) return 0; } return 1; } void print_field(int*A, int n) { int i,j; for (i=0; i<n; i++) { for (j=0; j<n; j++) printf("--"); printf("-\n"); for (j=1; j<A[i]; j++) printf("| "); printf("|*"); for (j=A[i]; j<n; j++) printf("| "); printf("|\n"); } for (j=0; j<n; j++) printf("--"); printf("-\n\n"); } void build(int*A, int n) { int*B; int i,k; for (k=0;(A[k]!=0)&&(k<n);k++); if (k>=n){print_field(A,n); return;} B=(int*)malloc(n*sizeof(int)); for (i=0;i<k;i++) B[i]=A[i]; for (i=k;i<n;i++) B[i]=0; for (i=1;i<=n;i++) { B[k]=i; if (check(B,n)) build(B,n); } free(B); } void main(void) { int i,n; int*A; printf("Please, input n: "); scanf("%d",&n); A=(int*)malloc(n*sizeof(int)); for (i=0;i<n;i++)A[i]=0; printf("Solutions:\n"); build(A,n); free(A); getch(); } |
03.05.2010, 20:17 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
В этих постах есть много интересного по вашему запросу Стимпанк флешка на восемь гигабайт Восемь задач на VB |
05.05.2010, 09:53 | #2 (permalink) |
Новичок
Регистрация: 03.05.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Буду благодарен если кто поможет перевести туже программу с паскаля на С++
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[i])and(abs(k-i)<>abs(y-X[i])) 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[i]);writeln;inc(Count) end; Backtracking(k+1) end end; begin Count:=0; writeln('Расстановки ',N,' ферзей:'); Backtracking(1); writeln('Всего ',Count,' расстановок') end. Последний раз редактировалось bugim; 05.05.2010 в 10:13 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|