Problem H: 稀疏矩阵的表示和运算 SDUSTOJ
2017-05-03 08:50
211 查看
本来想用 vector ,试了下不好实现,换用 node 的数组
重载运算
重载运算
#include<iostream> #include<cstdio> #include<vector> #include<algorithm> #include<set> using namespace std; const int maxn = 10000; struct node { int r, c, v; }; bool cmp(node aa, node bb) { if(aa.r == bb.r) return aa.c < bb.c; return aa.r < bb.r; } class Triple { private: node a_[maxn]; int len; public: Triple() {} ~Triple() {} friend istream &operator >> (istream &in, Triple &t) { int i = 0; while(1) { in >> t.a_[i].r >> t.a_[i].c >> t.a_[i].v; if(t.a_[i].r == 0 && t.a_[i].c == 0) break; ++i; } t.len = i; return in; } friend ostream &operator << (ostream &out, Triple& t) { sort(t.a_, t.a_+t.len, cmp); //cout << "++++" << endl; for(int i = 0; i < t.len; i++) { if(t.a_[i].v != 0) out << t.a_[i].r << " " << t.a_[i].c << " " << t.a_[i].v << endl; } //cout << "++++" << endl; return out; } Triple operator + (Triple &b) { for(int i = 0; i < b.len; ++i) a_[i+len] = b.a_[i]; len = len + b.len; sort(a_, a_+len, cmp); for(int i = 0; i < len-1; ++i) if(a_[i].r == a_[i+1].r && a_[i].c == a_[i+1].c) { a_[i].v += a_[i+1].v; a_[i+1].v = 0; } return *this; } }; int main() { Triple mat1, mat2, mat3; cin>>mat1; cin>>mat2; mat3 = mat1 + mat2; cout<<mat3; return 0; }
相关文章推荐
- Problem H: 稀疏矩阵的表示和运算
- Problem H: 稀疏矩阵的表示和运算
- Problem H: 稀疏矩阵的表示和运算
- 稀疏矩阵的表示和运算
- 数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- SDUSTOJ Problem H: 稀疏矩阵的表示和运算
- 第九周项目3--稀疏矩阵的三元组表示的实现及应用--(2)两个稀疏矩阵相加的运算
- 稀疏矩阵在opencv中的应用(大矩阵运算速度过慢的问题,借助SparseMat?)
- 第九周 项目3-1 -建立稀疏矩阵三元组表示的算法库
- 第八周项目4-稀疏矩阵的三元组表示的实现及应用(1)
- 第9周项目3 稀疏矩阵的三元组表示的实现及应用(1)
- 第九周 项目3-稀疏矩阵的三元组表示的应用(2)
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(1)
- 第九周--项目三--稀疏矩阵的三元组表示的实现及应用
- 第九周 项目3-稀疏矩阵的三元组表示的实现及应用
- 第9周项目3 稀疏矩阵的三元组表示的实现及应用(1)
- 第9周项目3 稀疏矩阵的三元组表示的实现及应用(2)
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(1)
- 第9周项目3 稀疏矩阵的三元组表示的实现及应用(2)