struct Point { Point *u, *d, *l, *r, *lu, *ld, *ru, *rd; char value; }; #define SIZEM 10 void PrintMatrix(Point m[][SIZEM]) { for(int i = 0; i < SIZEM; ++i) { for(int j = 0; j < SIZEM; ++j) { std::cout << m[i][j].value; } std::cout << std::endl; } } void FillMatrix(Point arr[][SIZEM]) { for(int i = 0; i < SIZEM; ++i) { for(int j = 0; j < SIZEM; ++j) { arr[i][j].value = 'O'; } } } void LinkMatrix(Point arr[][SIZEM]) { for(int i = 0; i < SIZEM; ++i) { for(int j = 0; j < SIZEM; ++j) { if(i-1 >= 0) arr[i][j].u = &arr[i-1][j]; else arr[i][j].u = nullptr; if(i+1 <= SIZEM-1) arr[i][j].d = &arr[i+1][j]; else arr[i][j].d = nullptr; if(j-1 >= 0) arr[i][j].l = &arr[i][j-1]; else arr[i][j].l = nullptr; if(j+1 <= SIZEM-1) arr[i][j].r = &arr[i][j+1]; else arr[i][j].r = nullptr; if(i-1 >= 0 && j -1 >= 0) arr[i][j].lu = &arr[i-1][j-1]; else arr[i][j].lu = nullptr; if(i-1 >= 0 && j+1 <= SIZEM-1) arr[i][j].ru = &arr[i-1][j+1]; else arr[i][j].ru = nullptr; if(i+1 <= SIZEM-1 && j-1 >= 0) arr[i][j].ld = &arr[i+1][j-1]; else arr[i][j].ld = nullptr; if(i+1 <= SIZEM-1 && j+1 <= SIZEM-1) arr[i][j].rd = &arr[i+1][j+1]; else arr[i][j].rd = nullptr; } } } int main() { Point arr[SIZEM][SIZEM]; LinkMatrix(arr); FillMatrix(arr); arr[1][1].rd->rd->rd->rd->rd->value= 'X'; PrintMatrix(arr); std::cin.get(); }