DB_Question
解决:
1、存
2、验证
1 #include <iostream> 2 using namespace std; 3 4 //将小矩阵的值转存在一维数组b中 5 void TurnToB(int a[][16], int b[], int m, int t); 6 //关键的存放算法 7 void CoreStore(int b[], int x, int y, int val, int m); 8 //验证i,j到k是否正确,具体检验k是否能输出 9 void show(int b[], int i, int j, int m); 10 11 int main() 12 { 13 int n = 16, m = 4, t = 4;//以16×16方阵为例 14 int a[16][16]; 15 int b[64];//m*m*t 16 //初始化特殊位置的值 17 a[0][0] = 0, a[0][3] = 3, a[3][0] = 3; 18 a[3][3] = 6, a[7][4] = 11, a[4][7] = 11; 19 a[7][7] = 14, a[8][11] = 19, a[11][8] = 19; 20 a[11][11] = 22, a[12][15] = 27, a[15][12] = 27; 21 a[15][15] = 30, a[5][5] = 10, a[10][11] = 21; 22 //------------------------------------------- 23 TurnToB(a, b, m, t); 24 //验证上一步算法的正确性 25 show(b, 0, 0, m); 26 show(b, 0, 3, m); 27 show(b, 3, 0, m); 28 show(b, 3, 3, m); 29 30 show(b, 7, 4, m); 31 show(b, 4, 7, m); 32 show(b, 7, 7, m); 33 show(b, 8, 11, m); 34 35 show(b, 11, 8, m); 36 show(b, 11, 11, m); 37 show(b, 12, 15, m); 38 show(b, 15, 12, m); 39 40 show(b, 15, 15, m); 41 show(b, 5, 5, m); 42 show(b, 10, 11, m); 43 44 return 0; 45 } 46 void TurnToB(int a[][16], int b[], int m, int t) 47 { 48 int x, y; 49 for (int i = 0; i < m; i++) 50 { 51 for (int j = 0; j < m; j++) 52 { 53 for (int k = 0; k < t; k++) 54 { 55 x = i + m*k; 56 y = j + m*k; 57 CoreStore(b, x, y, a[x][y], m); 58 } 59 } 60 } 61 } 62 void CoreStore(int b[], int x, int y, int val, int m) 63 { 64 int loc = (x / m)*m*m + (x%m)*m + y - (x / m)*m; 65 b[loc] = val; 66 } 67 void show(int b[], int i, int j, int m) 68 { 69 int loc = (i / m)*m*m + (i%m)*m + j - (i / m)*m; 70 cout << "a[" << i << "][" << j << "]=b[" << loc << "]=" << b[loc] << endl; 71 }