/ *********************/**************
#define True 1
#define false 0
#define ok 1
#define error 0
#define infeasivle -1
#define overflow -2
#define list_init_size 100
#define ListINcreme 10
#define Equal 1
#define stack_init_size 100
#define stackincrement 10
#define max 100
#define maxSize 100
/*********** Triplet.H************
#include
#include
#include
#include
TypedEf Int * Triplet;
Typedef struct triple {
INT I, J;
ELMTYPE E;
} Triple;
Typedef struct rlsmatrix {
Triple Data [MAXSIZE 1];
Int rpos [80];
Int Mu, Nu, Tu;
} Rlsmatrix;
STATUS INITTRIPLET ();
Status destroytriplet ();
STATUS GET ();
STATUS PUT ();
STATUS isascendin ();
STATUS Isdescending ();
STATUS max ();
STATUS min ();
void printtriplet (); / * not in general use, only for multiplication.c * /
Status multsmatrix (); / * not in general use, only for multiplication.c * /
Status scanmatrix (); / * not in general use, only for multiplication.c * /
/ * NOT IN General Use, Only for TSMatrix.c * /
Status fasttransposeesmatrix ();
STATUS INITTRIPLET (Triplet * T, ElemType V1, ElemType V2, ELEMTYPE V3) {
(* T) = (ELMTYPE *) Malloc (3 * sizeof (elemType));
IF (! t)
EXIT (OVERFLOW);
(* T) [0] = V1; (* T) [1] = V2; (* T) [2] = V3;
Return OK;
}
Status DestroyTriplet (Triplet T) {
Free (t);
T = NULL;
Return OK;
}
Status Get (Triplet T, INT I, ELEMTYPE * E) {
IF (i <1 || i> 3)
Return Error;
* E = T [I-1];
Return OK;
}
Status Put (Triplet T, INT I, ELMTYPE * E) {
IF (i <1 || i> 3) Return Error;
T [I-1] = * e;
Return OK;
}
Status isascending (Triplet T) {RETURN (T [0] <= T [1]) && (t [1] <= t [2]);
}
Status isdescending (Triplet T) {
Return (T [0]> = T [1]) && (t [1]> = t [2]);
}
Status Max (Triplet T, ELMTYPE * E) {
e [0] = (t [0]> = t [1])? ((t [0]> = t [2])? T [0]: T [2]): ((t [1]> = T [2])? T [1]: t [2]);
Return OK;
}
Status min (Triplet T, ELEMTYPE * E) {
e [0] = (t [0] <= t [1])? ((t [0] <= t [2])? T [0]: T [2]): ((t [1] < = T [2])? T [1]: t [2]);
Return OK;
}
Void Printtriplet (rlsmatrix m)
{
INT R, C, N;
For (r = 1, n = 1; r <= m.mu; r ) {
For (c = 1; c <= m.nu; C ) {
IF (r == m.data [n] .i && c == m.data [n] .j) {
Printf ("% - 6d", M.DATA [N] .e);
N ;
}
Else Printf ("% - 6d", 0);
}
Printf ("/ n");
}
PUTS ("/ n");
}
Status Multsmatrix (rlsmatrix M, RLSMATRIX N, RLSMATRIX * Q)
{
INT AROW, TP, BROW, P, T, Q, CCOL, CTEMP [100];
IF (M.nu! = n.mu)
{
Printf ("The Colt of First Matrix is Unequal The Row of Second Matrix !!");
Return Error;
}
Q-> MU = M.MU; Q-> Nu = N.nu; Q-> TU = 0;
IF (m.tu * n.tu! = 0) {
For (Arow = 1; AROW <= M.MU; AROW)
{
For (p = 0; p <= n.nu; p )
CTEMP [P] = 0;
Q-> rpos [arow] = Q-> TU 1;
IF (Arow TP = m.rpos [AROW 1]; Else TP = m.tu 1; For (p = m.rpos [arow]; p { Brow = m.data [p] .j; IF (brow T = n.rpos [brow 1]; Else T = n.tu 1; For (q = n.rpos [brow]; q { CCOL = N.DATA [q] .j; CTEMP [CCOL] = M.data [P] .e * n.data [q] .e; } } For (ccol = 1; ccol <= q-> nu; ccol) IF (CTEMP [CCOL]) { IF ( Q-> TU> maxsize) Return Error; Q-> Data [q-> TU] .i = arow; q-> data [q-> tu] .j = ccol; Q-> Data [q-> TU] .e = ctemp [ccol]; } } } Return OK; } Status Scanmatrix (rlsmatrix * m) { INT I, J, K, SUM [80]; Printf ("/ N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / NUS THE SIGN OF MATRIX'S COL, AND 'E' OR 'TU' Is The length of matrix: / nmu = nu = Tu = / N "); Scanf ("% D% D% D", & M-> MU, & M-> Nu, & M-> TU); IF (M-> TU> (M-> MU * M-> NU))) Printf ("The Third Number Which You Had Input Has Error! Too Big !!! / N"); Else { Printf ("ROW = COL = DATE = / N"); For (i = 1; i <= m-> tu; i ) { M-> Data [0] .i = 0; M-> Data [0] .j = 0; M-> DATA [0] .e = 0; Scanf ("% D% D% D", & M-> DATA [I] .i, & m-> data [i] .j, & m-> data [i] .e); IF ((M-> Data [i] .i> m-> mu) || (M-> data [i] .j> m-> nu) || (M-> DATA [I] .i Printf ("The date you had INPUTED HAS ERROR !!! / N"); } For (i = 1; i <= m-> mu; i ) SUM [I] = 0; For (i = 1; i <= m-> tu; i) SUM [M-> Data [i] .i]; M-> RPOS [1] = 1; FOR (i = 2; i <= m-> mu; i) M-> RPOS [I] = m-> RPOS [I-1] SUM [I-1]; } } Status FastTransposeSmatrix (rlsmatrix M, RLSMatrix * T) { INT COL, T, P, Q, NUM [100], CPOT [100]; T-> MU = m.nu; t-> Nu = m.mu; t-> tu = m.tu; IF (t-> tu) { For (COL = 1; COL <= M.NU; COL) NUM [col] = 0; For (t = 1; t <= m.tu; t) Num [M.Data [T] .j]; Cpot [1] = 1; For (COL = 2; Col <= M.NU; COL) cpot [col] = cpot [col-1] NUM [col-1]; For (p = 1; p <= m.tu; p) { COL = M.Data [P] .j; Q = cpot [col]; T-> DATA [q] .i = m.data [p] .j; T-> Data [q] .j = m.data [p] .i; T-> DATA [q] .e = m.data [p] .e; cpot [col]; } } Return OK; }