Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2022, 08:39   #1
web developer
Пользователь
 
Регистрация: 04.06.2022
Сообщений: 62
По умолчанию C

Пытаюсь запустить программу на c пишет (стек памяти сброшен на диск)
Код:
#include <stdio.h>
#pragma warning (disable:4996)
FILE* end_file;
int n, active_n, standing_n,s=0;//размер поля, кол-во фигур для постановки, кол-во фигур уже стоящих,счётчик вариантов
int board[24][24] = {0};
int x_line[24] = {0};//строки которые бьются
int y_line[24] = {0};//столбцы которые бьютя
int main_digonal[47] = {0};//диагонали подобные главной ,которые бьются
int off_diagonal[47] = {0};//диагонали подобные побочной,который бьются
int Horse(int x, int y)
{
    int x_horse_move[8] = { 2,  2, 1,  1,-2, -2, -1, -1 };// ходы 
    int y_horse_move[8] = { 1, -1, 2, -2, 1, -1,  2, -2 };// коня
    int i;
    for (i = 0; i < 8; i++)
    {
        if (board[x + x_horse_move[i]][y + y_horse_move[i]] != 0) return 1;
    }
    return 0;
}
int maharajah(int S,FILE **F)
{
    int i, j, f, g;
    if (S == 0)
    {
        int flag=0,stop=0;
        for (i = n-1; i >-1; i--)
        {
            for (j = n-1; j >-1; j--)
            {
                if ((board[i][j] != 0) && (board[i][j] != -1) && (board[i][j] == flag + 1)) flag = board[i][j];
                else if ((board[i][j] != 0) && (board[i][j] != -1) && (board[i][j] != flag + 1)) stop = 1;
            }
        }
        if (stop == 0)
        {
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    if (board[i][j] != 0) fprintf(*F, "(%d,%d) ", i, j);
                }
            }
            fputc('\n',*F);
            s++;
        }
        return 0;
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++) 
        {
            if ((board[i][j] == 0) && (x_line[i] == 0) && (y_line[j] == 0) && (main_digonal[4 - i + j] == 0) && (off_diagonal[8 - i - j] == 0) && (Horse(i, j) == 0))
            {
                board[i][j] = S;
                x_line[i] = 1;
                y_line[j] = 1;
                main_digonal[4 - i + j] = 1;
                off_diagonal[8 - i - j] = 1;
                if (maharajah(S - 1,F) == 0)
                {
                    for (f = 0; f < n; f++)
                    {
                        for (g = 0; g < n; g++)
                        {
                            if (board[f][g] == S) board[f][g] = 0;
                        }
                    }
                    x_line[i] = 0;
                    y_line[j] = 0;
                    main_digonal[4 - i + j] = 0;
                    off_diagonal[8 - i - j] = 0;
                }
            }
        }
    }
    return 0;
}
int main()
{
    int i, x, y, j;
    FILE* start_file, * end_file;
    start_file = fopen("input.txt","r");
    end_file = fopen("output.txt","w");
    fscanf(start_file,"%d %d %d",&n,&active_n,&standing_n );//размер поля, кол-во фигур для постановки, кол-во фигур уже стоящих

    //Постановка изначальных/standing_n магардж 
    for (i = 0; i < standing_n; i++)
    {
        fscanf(start_file,"%d" "%d",&x,&y);
        board[x][y] = -1;//Позиция занята начальной магараджей
        x_line[x] = 1;// x линия бьётся
        y_line[y] = 1;// y линия бьётся
        main_digonal[4 - x + y] = 1;// бьётся диагональ подобная главной
        off_diagonal[8 - x - y] = 1;// бьётся диагональ подобная побочной
    }
    if (active_n == 1)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                if ((board[i][j] == 0) && (x_line[i] == 0) && (y_line[j] == 0) && (main_digonal[4 - i + j] == 0) && (off_diagonal[8 - i - j] == 0) && (Horse(i, j) == 0))
                {
                    fprintf(end_file, "(%d,%d)\n", i, j);
                    s++;
                }
            }
        }
    }
    else maharajah(active_n, &end_file);
    if (s == 0) fprintf(end_file, "no solutions");
    fclose(start_file);
    fclose(end_file);
}
Изображения
Тип файла: png Снимок экрана от 2022-12-13 08-04-32.png (59.8 Кб, 9 просмотров)
web developer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц