Форум программистов, компьютерный форум CyberForum.ru

Судоку. Ввод/вывод в файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ правильно работать во время учебы? http://www.cyberforum.ru/cpp-beginners/thread869174.html
или лучше после окончания института?
C++ Составить программу, печатающую ДА или НЕТ в зависимости от того, имеют ли три целых введенных числа одинаковую четность Составить программу, печатающую ДА или НЕТ в зависимости от того, имеют ли три целых введенных числа одинаковую четность.Помогите пожалуйста с задачей. http://www.cyberforum.ru/cpp-beginners/thread869167.html
Освобождение памяти в методе класса C++
Здравствуйте, В университете дали задание написать написать стек с итератором произвольного доступа. Собственно, класс стека и итератора я написал. Есть только одна проблема. При выполнении ф-ии pop для класса stack появляется неиспользуемая память, которая в некоторых случаях может занимать довольно большой размер. Поэтому решил написать ф-ию на подобие shrink_to_fit, т.е. уменьшить размер до...
Работа с class ами. Заполнение дин. массива типа class C++
Всем доброго времени суток! Это моя первая тема на этом сайте, поэтому если что извините меня (за неточности итд итп). Мне нужно создать заполненный дин. массив типа class ов. Я бы хотел посмотреть на какой нибудь стандартный приёмчик, как это сделать допустим с перегруженным конструктором(или ещё кое как), с одним экземпляром все ясно. Ниже приведен некий код, #include <iostream>...
C++ Задача С++ http://www.cyberforum.ru/cpp-beginners/thread869149.html
Ребят,помогите пожалуйста решить задачу в С++
C++ Синтаксический анализатор Помогите, пожалуйста, исправить код синтаксического анализатора. - оно выбрасывает программу. Надо по принципу: вот и код: #include <iostream> #include <string.h> #include <Windows.h> // using namespace std; // подробнее

Показать сообщение отдельно
IwINoX
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 6
18.05.2013, 13:56     Судоку. Ввод/вывод в файл
Здравствуйте. Возникла такая проблема, нашёл программу решения судоку, там ввод в самой програме, нужно сделать ввод/вывод в файл. Не могу додуматься как это сделать. Помогите пожалуйста.
Вот код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <algorithm>
 
const unsigned SIZE=9;
 
typedef unsigned char sudoku[SIZE][SIZE];
 
bool check(sudoku matrix,unsigned x,unsigned y){
    unsigned char val=matrix[x][y];
    for (unsigned a=0;a<x;a++)
        if (matrix[a][y]==val)
            return 0;
    for (unsigned a=x+1;a<SIZE;a++)
        if (matrix[a][y]==val)
            return 0;
    for (unsigned a=0;a<y;a++)
        if (matrix[x][a]==val)
            return 0;
    for (unsigned a=y+1;a<SIZE;a++)
        if (matrix[x][a]==val)
            return 0;
    unsigned startx=x/(SIZE/3)*3,
        starty=y/(SIZE/3)*3,
        endx=startx+SIZE/3,
        endy=starty+SIZE/3;
    for (unsigned a=startx;a<endx;a++){
        for (unsigned b=starty;b<endy;b++){
            if (a!=x && b!=y && matrix[a][b]==val)
                return 0;
        }
    }
    return 1;
}
 
void printMatrix(sudoku matrix){
    for (unsigned b=0;b<SIZE;b++){
        for (unsigned a=0;a<SIZE;a++){
            if (matrix[a][b])
                std::cout <<(int)matrix[a][b];
            else
                std::cout <<'_';
            if (a && a%(SIZE/3)==SIZE/3-1)
                std::cout <<' ';
        }
        std::cout <<std::endl;
        if (b && b%(SIZE/3)==SIZE/3-1)
            std::cout <<std::endl;
    }
}
 
void transpose(sudoku matrix){
    for (unsigned y=0;y<SIZE-1;y++){
        for (unsigned x=y+1;x<SIZE;x++){
            std::swap(matrix[x][y],matrix[y][x]);
        }
    }
}
 
bool solve(sudoku matrix,unsigned pos=0){
    unsigned x=pos%SIZE,
        y=pos/SIZE;
    if (y>=SIZE)
        return 1;
    if (matrix[x][y])
        return solve(matrix,pos+1);
    for (unsigned a=1;a<=SIZE;a++){
        
        matrix[x][y]=a;
        if (check(matrix,x,y) && solve(matrix,pos+1))
            return 1;
    }
    matrix[x][y]=0;
    return 0;
}
 
int main(){
    sudoku matrix=
    {
        1,0,00,0,70,9,0,
        0,3,00,2,00,0,8,
        0,0,96,0,05,0,0,
        
        0,0,53,0,09,0,0,
        0,1,00,8,00,0,2,
        6,0,00,0,40,0,0,
        
        3,0,00,0,00,1,0,
        0,4,00,0,00,0,7,
        0,0,70,0,03,0,0,
    };
    transpose(matrix);
    if (!solve(matrix))
        std::cout <<"Unsolvable!"<<std::endl;
    else
        printMatrix(matrix);
 
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru