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

Двумерный массив с уникальными элементами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Передать файл в процедуру http://www.cyberforum.ru/cpp-beginners/thread858748.html
Как передать файл в процедуру? Вот код: #include <cstdlib> #include <iostream> #include <stdio.h> using namespace std; char simvol; void E(void );
C++ Натуральные числа (НОД) Даны натуральные числа n,m; найти НОД(n,m). Использовать программу, включающую рекурсивную процедуру вычисления НОД, основанную на соотношении НОД(n,m)=НОД(m,r), где r-остаток от деления n на m. Чем эта программа хуже нерекурсивной программы вычисления НОД(n,m)? http://www.cyberforum.ru/cpp-beginners/thread858745.html
Написать коментарии C++
#include <iostream> class S { public: virtual int get() = 0;}; class A1 : public S { public: virtual int get() { return a1; } private:
C++ Как сделать, чтобы окно выполнения сразу не закрывалось?
помогите пожалуйста, после компиляции при выполнении окно очень быстро пропадает. как сделать что бы оно сразу не закрывалось?
C++ Надо переделать немного программу http://www.cyberforum.ru/cpp-beginners/thread858733.html
Смотрите есть программа на решение методом хорд нелинейных уравнений. Но проблема в том что я не могу ее переработать так чтоб данные можно было вводить с клавиатуры #include <iostream> #include <math.h> using namespace std; float m_ch(float, float, float); float your_function(float); int main() {
C++ чтение из файла определенной строки Доброго времени суток. Передо мной встала задача, прочитать определённую строку из текстового файла. прочитать весь файл целиком я могу. Но вот определённую строку... С чего начать, не подскажете? подробнее

Показать сообщение отдельно
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.05.2013, 15:17     Двумерный массив с уникальными элементами
Вот решение более сложной задачи - вторая встречная.
Дано поле 7*7. Необходимо заполнить все пустые клетки цифрами от 1 до 6 таким образом, чтобы в каждом столбце и в каждой строке каждая цифра встречалась ровно один раз. Одна клетка в каждом столбце и в каждой строке при этом останутся пустыми. Цифры слева, справа, снизу и сверху поля указывают, что именно эта цифра будет второй цифрой в данном направлении.
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>
const int rowcols=7;
bool check(int row,int**table,int**condition) {
    int i,j,k;
    if (condition[0][row]!=0) {
        if (table[row][1]!=condition[0][row]) {
            if (table[row][2]!=condition[0][row]) return false;
                else
                    if((table[row][1]!=0)&&(table[row][0]!=0)) return false;
        }
        else
            if(table[row][0]==0) return false;
    }
    if (condition[1][row]!=0) {
        if (table[row][rowcols-2]!=condition[1][row]) {
            if (table[row][rowcols-3]!=condition[1][row]) return false;
                else
                    if(table[row][rowcols-2]!=0&&table[row][rowcols-1]!=0) return false;
        }
        else
            if (table[row][rowcols-1]==0) return false;
    }
    //check cols
    for (i = 0; i < rowcols; i++) {     //столбцы
        for (j = 0; j < rowcols; j++) {   //цифры
            int count=0;
            for (k=0; k<row+1; k++)    //строчки
                if (table[k][i]==j) count++;
            if (count>1) return false;
        }
    }
    if (row<rowcols-3)
        for (i = 0; i < rowcols; i++)
            if (table[row][i]==condition[3][i])
                return false;
    if (row==1) {
        for (i = 0; i < rowcols; i++) {
            if (condition[2][i]!=0) {
             if (table[1][i]!=condition[2][i]) {
                if ((table[0][i]!=0)&&(table[1][i]!=0)) return false;
             }
             else
             if (table[0][i]==0) return false;
            }
        }
    }
    if (row==2) {
       for (i = 0; i < rowcols; i++) {
           if (condition[2][i]!=0) {
            if (table[1][i]!=condition[2][i]&&table[2][i]!=condition[2][i]) return false;
            }
           }
    }
    if (row==rowcols-1) {
       for (i = 0; i < rowcols; i++) {
        if (condition[3][i]!=0)
            if (table[row-1][i]!=condition[3][i]) {
                if (table[row-2][i]!=condition[3][i]) return false;
                    else
                    if (table[row-1][i]!=0&&table[row][i]!=0) return false;
            }
            else
            if (table[row][i]==0) return false;
       }
    }
    return true;
}
void swap(int**table,int i, int j, int k) {
    int temp=table[i][j];
    table[i][j]=table[i][k];
    table[i][k]=temp;
}
bool generate(int i, int**current_table) {
    int j,k;
    if (current_table[i][0]==-1) {
        for (j=0; j<rowcols; j++) {
            current_table[i][j]=j;
        }
        return true;
    }
    else {
        // находим элемент меньше или равного последующему
        int pos = -1;
        for (j=rowcols-2;j>=0;j--)
            if (current_table[i][j] < current_table[i][j+1]) {
                pos=j;
                break;
            }
        if (pos == -1)
            return false; // текущая перестановка последняя в лексикографическом порядке
        // находим минимальный элемент превышающий найденый
        int value = current_table[i][pos];
        int swapIndex = -1;
        for (j=rowcols-1;j>=pos;j--)
        if (current_table[i][j]>value) {
            swapIndex = j;
            break;
        }
        swap(current_table,i,pos,swapIndex);
        //реверс подстроки правее индекса pos
        int f = pos+1, s = rowcols-1;
        while (f<s) {
            swap(current_table,i,f,s);
            f++;
            s--;
        }
        return true;
    }
}
bool rekurs(int i, int** current_table, int**condition_table) { //i- nomer tekushey stroki, cur - tekushaya tablica
 while (true) {
  if (generate(i,current_table)==false) { //generaciya stroki i po vozrastaniyu, vozvrashaet false pri nevozmojnosti
    current_table[i][0]=-1;
    return false;
   }
  if (check(i,current_table,condition_table)==true) {
    if (i<rowcols-1) {
        if (rekurs(i+1,current_table,condition_table)) {
            return true;
        }
    }
    else return true;
  }
  }
}
int _tmain(int argc, _TCHAR* argv[])
{
    int i,j,k;
    FILE *f=fopen("input.txt","r");
    if (f==NULL) {
        std::cout<<"File input.txt not found"<<std::endl;
        getch();
        return 0;
    }
    int **condition=new int*[4];
    int **result=new int*[rowcols];
    for (i = 0; i < rowcols; i++) {
        result[i]=new int[rowcols];
        for (j = 0; j < rowcols; j++) {
            result[i][j]=-1;
        }
    }
    for (i = 0; i < 4; i++) {
        condition[i]=new int[rowcols];
        for (j = 0; j < rowcols; j++) {
            fscanf(f,"%d",&condition[i][j]);
            std::cout<<condition[i][j]<<" ";
        }
        std::cout<<std::endl;
    }
    std::cout<<std::endl;
    fclose(f);
    f=fopen("output.txt","w");
    if (f==NULL) {
        std::cout<<"Can't create file output.txt"<<std::endl;
        getch();
    }
    if (rekurs(0,result,condition)==false) {
        std::cout<<"There is no solution"<<std::endl;
        if (f!=NULL) fprintf(f,"There is no solution");
        }
    else
        for (i = 0; i < rowcols; i++) {
            for (j = 0; j < rowcols; j++) {
                if (result[i][j]==0) {
                    std::cout<<"  ";
                    if (f!=NULL) fprintf(f,"  ");
                }
                else {
                    std::cout<<result[i][j]<<" ";
                    if (f!=NULL) fprintf(f,"%d ",result[i][j]);
                }
            }
            std::cout<<std::endl;
            if (f!=NULL) fprintf(f,"\n");
        }
    fclose(f);
    for (i = 0; i < rowcols; i++) {
        delete [] result[i];
    }
    delete [] result;
    for (i = 0; i < 4; i++) {
        delete [] condition[i];
    }
    delete [] condition;
    std::cout<<std::endl<<"Press any key to exit...";
    getch();
    return 0;
}
 
Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru