zoukankan      html  css  js  c++  java
  • 三元组转置稀疏矩阵

    #pragma once
    #define MAXSIZE 1000
    #include<iostream>
    using namespace std;
    template<class DataType>
    class triple {
    public:
    	int row, col;
    	DataType e;
    };
    
    template<class DataType>
    class Mtriple {
    public:
    	int mrow, mcol, mnum;//mnum是非0个数
    	triple<DataType>data[MAXSIZE + 1];
    
    	void transpose(Mtriple a);
    	void printm(Mtriple a);
    
    	Mtriple(int mrow, int mcol, DataType *m);
    	Mtriple();
    	~Mtriple();
    };
    
    template<class DataType>
    inline Mtriple<DataType>::Mtriple(int mrow,int mcol, DataType *m)
    {
    	cout << 'i' << " " << 'j' << " " << 'v' << endl;
    	int cnt = 0;
    	this->mrow = mrow;
    	this->mcol = mcol;
    	for (int i = 0; i < mrow; i++) {
    		for (int j = 0; j < mcol; j++) {
    			if (*(m+i*mcol+j) != 0) {
    				//this->data[++cnt] = m[i][j];
    				
    				this->data[++cnt].row = i+1;
    				this->data[cnt].col = j+1;
    				this->data[cnt].e = *(m + i * mcol + j);
    				cout << this->data[cnt].row << " " << this->data[cnt].col << " " << this->data[cnt].e << endl;
    			}
    		}
    	}
    	this->mnum = cnt;
    }
    
    template<class DataType>
    inline Mtriple<DataType>::Mtriple()
    {
    }
    
    
    template<class DataType>
    inline void Mtriple<DataType>::transpose(Mtriple a)
    {
    	cout <<endl<< 'i' << " " << 'j' << " " << 'v' << endl;
    	int cnt = 1;
    	a.mrow = this->mcol;
    	a.mcol = this->mrow;
    	a.mnum = this->mnum;
    
    	for (int j = 1; j <= this->mcol; j++) {
    		for (int i = 1; i <= this->mnum; i++) {
    			if (this->data[i].col == j) {
    				a.data[cnt].row = j;
    				a.data[cnt].col = this->data[i].row;
    				a.data[cnt].e = this->data[i].e;
    				cout << a.data[cnt].row << " " << a.data[cnt].col << " " << a.data[cnt].e << endl;
    				++cnt;
    			}
    		}
    	}
    	printm(a);
    }
    
    template<class DataType>
    inline void Mtriple<DataType>::printm(Mtriple a)
    {
    	cout << endl << "转置矩阵:" << endl;
    	int flag = 1;
    	for (int i = 1; i <= a.mrow; i++) {
    		for (int j = 1; j <= a.mcol; j++) {
    			for (int k = 1; k <= a.mnum; k++) {
    				if ((j == a.data[k].col)&&(i == a.data[k].row)) {
    					cout << a.data[k].e << " ";
    					flag = 1;
    					break;
    				}
    				else
    					flag = 0;
    			}
    			if (flag == 0) {
    				cout << 0 << " ";
    			}
    		}
    		cout << '
    ';
    	}
    }
    
    
    template<class DataType>
    inline Mtriple<DataType>::~Mtriple()
    {
    }
    

      

    #include<iostream>
    #include<stdlib.h>
    #include"triple.h"
    using namespace std;
    //void fun(int m[3][4]) {
    //
    //	for (int i = 0; i < 3; i++)
    //		for (int j = 0; j < 4; j++)
    //			cout << m[i][j];
    //}
    int main() {
    
    	int m[3][4] = { 
    		{0,0,0,1},
    		{1,0,0,1},
    		{0,0,1,0} };
    
    	
    	Mtriple<int> t(3, 4, (int*)m);
    	Mtriple<int> p;
    	t.transpose(p);
    	//fun(m);
    	
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    tomcat配置数据源
    Spring 配置详解
    典型的软件开发模型
    600字让你读懂Git
    JVM的自愈能力
    Maven的pom.xml文件详解
    如何使用Log4j
    掌握jQuery插件开发,这篇文章就够了
    CSS Gradient详解
    CSS Transition
  • 原文地址:https://www.cnblogs.com/kazama/p/11792599.html
Copyright © 2011-2022 走看看