Показать сообщение отдельно
Старый 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 вне форума   Ответить с цитированием
Ads

Яндекс

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