zimlok
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ребят помогите перевести код из С++ в Си: #include <iostream.h> #include <iomanip.h> #include <string.h> int w[4][16]={{ 1, 2, 3, 4, 9,10,11,12,17,18,19,20,25,26,27,28}, { 8,16,24,32, 7,15,23,31, 6,14,22,30, 5,13,21,29}, {64,63,62,61,56,55,54,53,48,47,46,45,40,39,38,37}, {57,49,41,33,58,50,42,34,59,51,43,35,60,52,44,36}}; int u[9] = {0, -2, -2, 2, 2, 1, 1, -1, -1}; int v[9] = {0, 1, -1, -1, 1, 2, -2, -2, 2}; int a[12] = {0}; int a1[3] = {0}; int c[8][8]; char c0[8][8]; int i, j, t, m = 0, p = 0; void PRINT() { int k = 0; for(i = 0; i < 4; i++)//{ переписываем в массив A значения клеток с конями } { for(j = 0; j < 3; j++) { a[k] = w[i][a1[j]]; cout << setw(3) << a[k++]; } } cout << " -(" << ++m << ")" << endl; for(j = 0; j < 8; j++) memset(c0[j], '.', sizeof(c0[j])); //{ все c0[i,j]='.'} for( k = 0; k < 12; k++) { i = (a[k] - 1) / 8; j = (a[k] - 1) % 8; c0[i][j] = 'X'; } for(i = 0; i < 8; i++) { for( j = 0; j < 8; j++) cout << setw(3) << c0[i][j]; cout << endl; } cout << endl; } // { ставим (d=1) или снимаем (d=-1) 4 K-го коня } void KON(int k, int d) { for(int k1 = 0; k1 < 4; k1++) { int ik = (w[k1][a1[k]] - 1) / 8; int jk = (w[k1][a1[k]] - 1) % 8; for(int z = 0; z < 9; z++) { int i = ik + u[z]; int j = jk + v[z]; if(i >= 0 && i < 8 && j >= 0 && j < 8) { c[i][j] += d; if(d == 1) if(c[i][j] == 1) p++; if(d == -1) if(c[i][j] == 0) p--; } } } } void CNK(int k, int L, int R) { for(int j = L; j < R; j++) { a1[k] = j; KON(k, 1); if(k < 2) CNK(k + 1, j + 1, R + 1); else if(p == 64) PRINT(); KON(k, -1); } } void main() { CNK(0, 1, 13); cout << "*** END ***" << endl; cin.get(); } |