第9週実践項目3-疎行列の三元グループ表現の実現と応用(1)

5678 ワード

/* 
Copyright (c)2015,               
All rights reserved. 
    :  3-1.cbp 
      :    
    :2015 11 10  
     :v1.0 
 
 
    :(1)               ,  :  
 
①   tup.h,      ,    ;  
 
②    tup.cpp,                ,      : 
    void CreatMat(TSMatrix &t,ElemType A[M][N]);  //                  
    bool Value(TSMatrix &t,ElemType x,int i,int j);  //        
    bool Assign(TSMatrix t,ElemType &x,int i,int j);  //              
    void DispMat(TSMatrix t); //      
    void TranTat(TSMatrix t,TSMatrix &tb);//     
 
③   main  ,            
    :  
    :     
*/ 

tup.hファイルコード:
#ifndef TUP_H_INCLUDED  
#define TUP_H_INCLUDED  
  
  
#include <stdio.h>  
#define M 6  
#define N 7  
#define MaxSize  100         //             
typedef int ElemType;  
  
  
typedef struct  
{  
    int r;                  //    
    int c;                  //    
    ElemType d;             //     
} TupNode;                  //       
  
  
typedef struct  
{  
    int rows;               //    
    int cols;               //    
    int nums;               //        
    TupNode data[MaxSize];  
} TSMatrix;                 //          
  
  
void CreatMat(TSMatrix &t,ElemType A[M][N]);  //                   
bool Value(TSMatrix &t,ElemType x,int i,int j);  //         
bool Assign(TSMatrix t,ElemType &x,int i,int j); //               
void DispMat(TSMatrix t);//       
void TranTat(TSMatrix t,TSMatrix &tb);//      
  
  
#endif // TUP_H_INCLUDED  
tup.cppファイルコード:
#include "tup.h"  
  
  
void CreatMat(TSMatrix &t,ElemType A[M][N])  //                   
{  
    int i,j;  
    t.rows=M;  
    t.cols=N;  
    t.nums=0;  
    for (i=0; i<M; i++)  
    {  
        for (j=0; j<N; j++)  
            if (A[i][j]!=0)     //         
            {  
                t.data[t.nums].r=i;  
                t.data[t.nums].c=j;  
                t.data[t.nums].d=A[i][j];  
                t.nums++;  
            }  
    }  
}  
  
  
bool Value(TSMatrix &t,ElemType x,int i,int j)  //         
{  
    int k=0,k1;  
    if (i>=t.rows || j>=t.cols)  
        return false;               //     false  
    while (k<t.nums && i>t.data[k].r) k++;                  //     
    while (k<t.nums && i==t.data[k].r && j>t.data[k].c) k++;//     
    if (t.data[k].r==i && t.data[k].c==j)   //         
        t.data[k].d=x;  
    else                                    //                 
    {  
        for (k1=t.nums-1; k1>=k; k1--)  
        {  
            t.data[k1+1].r=t.data[k1].r;  
            t.data[k1+1].c=t.data[k1].c;  
            t.data[k1+1].d=t.data[k1].d;  
        }  
        t.data[k].r=i;  
        t.data[k].c=j;  
        t.data[k].d=x;  
        t.nums++;  
    }  
    return true;                        //     true  
}  
  
  
bool Assign(TSMatrix t,ElemType &x,int i,int j)  //               
{  
    int k=0;  
    if (i>=t.rows || j>=t.cols)  
        return false;           //     false  
    while (k<t.nums && i>t.data[k].r) k++;                  //     
    while (k<t.nums && i==t.data[k].r && j>t.data[k].c) k++;//     
    if (t.data[k].r==i && t.data[k].c==j)  
        x=t.data[k].d;  
    else  
        x=0;                //                 
    return true;            //     true  
}  
  
  
void DispMat(TSMatrix t)        //       
{  
    int i;  
    if (t.nums<=0)          //           
        return;  
    printf("\t%d\t%d\t%d
",t.rows,t.cols,t.nums); printf("\t------------------
"); for (i=0; i<t.nums; i++) printf("\t%d\t%d\t%d
",t.data[i].r,t.data[i].c,t.data[i].d); } void TranTat(TSMatrix t,TSMatrix &tb) // { int p,q=0,v; //q tb.data tb.rows=t.cols; tb.cols=t.rows; tb.nums=t.nums; if (t.nums!=0) // { for (v=0; v<t.cols; v++) //tb.data[q] c for (p=0; p<t.nums; p++) //p t.data if (t.data[p].c==v) { tb.data[q].r=t.data[p].c; tb.data[q].c=t.data[p].r; tb.data[q].d=t.data[p].d; q++; } } }
main.cppファイルコード:
#include "tup.h"  
  
  
int main()  
{  
    TSMatrix t,tb;  
    int x,y=10;  
    int A[6][7]=  
    {  
        {0,0,1,0,0,0,0},  
        {0,2,0,0,0,0,0},  
        {3,0,0,0,0,0,0},  
        {0,0,0,5,0,0,0},  
        {0,0,0,0,6,0,0},  
        {0,0,0,0,0,7,4}  
    };  
    CreatMat(t,A);  
    printf("b:
"); DispMat(t); if (Assign(t,x,2,5)==true) // true printf("Assign(t,x,2,5)=>x=%d
",x); else // false printf("Assign(t,x,2,5)=>
"); Value(t,y,2,5); printf(" Value(t,10,2,5)
"); if (Assign(t,x,2,5)==true) // true printf("Assign(t,x,2,5)=>x=%d
",x); else // false printf("Assign(t,x,2,5)=>
"); printf("b:
"); DispMat(t); TranTat(t,tb); printf(" tb:
"); DispMat(tb); return 0; }
<img src="http://img.blog.csdn.net/20151109170924578" alt="" />