Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 03.05.2010, 20:17   #1 (permalink)
bugim
Новичок
 
Регистрация: 03.05.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Восемь ферзей С++

Всем привет, помогите отредактировать программу так, что бы при запуске она рассчитывала расположение ферзей для доски 8х8, а не выдавала окно с запросом, вот код:
#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();
}
bugim вне форума   Ответить с цитированием

Старый 03.05.2010, 20:17
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

В этих постах есть много интересного по вашему запросу

Стимпанк флешка на восемь гигабайт
Восемь задач на VB

Старый 05.05.2010, 09:53   #2 (permalink)
bugim
Новичок
 
Регистрация: 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
bugim вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:34.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.