?? matrix.h
字號:
const int INITMSIZE =400;//矩陣組的初始化大小
//////////////////////////////////////////////Matrix類定義開始*************************************************
class Matrix:public SqList
{
int mmax;
int mlength;
SqList list1;
int list1length;
public:
int (*matrix)[DIM][DIM];
Matrix()
{
int apd[DIM];
for (int i = 0; i < DIM; i++)
{
apd[i] = 0;
}
matrix = new int [INITMSIZE][DIM][DIM];
mmax = INITMSIZE;
mlength = 0;
list1.CountAll();
//list1.Display();
list1.AppendLine(apd);
list1length = list1.GetLength();
}
~Matrix()
{
delete []matrix;
matrix = NULL;
}
int GetMLength()
{
return mlength;
}
bool IfSame(int a[], int b[]);//數組a[]和b[]中是否有相同元素,下標從1開始比較
void AppendMatrix(int p[DIM][DIM]);
void CountAllMatrix();
void Display();
};
//////////////////////////////////
bool Matrix::IfSame(int a[], int b[])
{
int *pa = a, *pb;
for (int i = 0; i < DIM; i++,pa++)
{
pb = b;
for (int j = 0; j < DIM; j++,pb++)
{
if (*pa == *pb)
{
return true;
}
}
}
return false;
}
////////////////////////////////////
void Matrix::CountAllMatrix()///求所有的組,即包含全部1~DIM的行。
{
int i = 1;
int *m = list1.list[0];
int matrixtemp[DIM][DIM];
Stack <int *> s;
s.Push(m);
while (!s.StackEmpty() || (m[0] && m[1] && m[2]))
{
if ( i == DIM)
{
for ( int k = 0; k < DIM; k++)
{
s.GetOne(k, m);
for (int u = 0; u < DIM; u++)
{
matrixtemp[k][u] = m[u];
}
}
AppendMatrix(matrixtemp);
s.Pop(m);
i--;
}
while (i < DIM)
{
m += DIM;
if (!(m[0] && m[1] && m[2]))
{
break;
}
int *m1 = NULL;
int flag = 0;
for (int k = 0; k < i; k++)
{
s.GetOne(k, m1);
if (IfSame(m, m1))
{
flag = 1;
break;
}
}
if( flag == 0)
{
s.Push(m);
i++;
}
}//while
if (!(m[0] && m[1] && m[2]))
{
s.Pop(m);
i--;
}
}//while
}
////////////////////////////////////
void Matrix::AppendMatrix(int p[DIM][DIM])
{
if (mlength >= mmax)
{
if (!(matrix = (int (*)[DIM][DIM])realloc(matrix, (mmax + INCREASMENT)*DIM*DIM*sizeof(int))))
{
exit(0);
}
mmax += INCREASMENT;
}
int (*mt1)[DIM], *mt2, (*pt1)[DIM], *pt2;
mt1 = matrix[mlength];
pt1 = p;
for (int i = 0; i < DIM; i++,mt1++,pt1++)
{
mt2 = mt1[0];
pt2 = pt1[0];
for (int j = 0; j < DIM; j++,mt2++,pt2++)
{
*mt2 = *pt2;
}
}
mlength++;
}
/////////////////////////////////////////////////////
void Matrix::Display()
{
int (*p)[DIM][DIM] = matrix;
int (*p1)[DIM];
int *p2;
for (int i = 0; i < mlength; i++,p++)
{
p1 = p[0];
for (int j = 0; j < DIM; j++,p1++)
{
p2 = p1[0];
for (int k = 0; k < DIM; k++,p2++)
{
cout << *p2 << " " ;
}
cout << endl;
}
cout << endl;
}
cout << endl << "Total Matrix is:" << mlength << endl;;
}
//////////////////////////////////////////////Matrix類定義結束*****************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -