稀疏矩阵
相关网站:https://baike.baidu.com/item/%E7%A8%80%E7%96%8F%E7%9F%A9%E9%98%B5/3249303?fr=aladdin
今天我要针对的题目就是实践题:稀疏矩阵
书上对于稀疏矩阵的内容提及并不多,一开始也是在百度上看了很多相关知识,但打代码时还是遇到了很多问题,也问了同学很多简单的问题,终于还是解决了
先看看题目:
首先确定应该是用稀疏矩阵的三元组表示,然后进行输入,查询,输出。这是这道题的基本思路。
先是定义一个三元组,这个没什么问题:
#include<iostream> using namespace std; typedef struct { int r; int c; int v; }node; typedef struct { node a[500]; int length;//矩阵中非零元素的个数 }Tuple;
然后输入数据:
int main() { Tuple q; int m,n,N; cin>>m>>n>>N; q.length=N; for(int i=0;i<q.length;i++) { cin>>q.a[i].r;//输入非零元素所在行,列号和非零元素的值 cin>>q.a[i].c; cin>>q.a[i].v; } int k; cin>>k;//输入查询数据
然后需要查询:
int k; cin>>k;//输入查询数据 if(k!=0) { for(int i=0;i<q.length;i++) { if(q.a[i].v == k) { cout<<q.a[i].r<<" ";//注意空格 cout<<q.a[i].c; } if( (q.a[i].v != k) && (i == q.length-1)) cout<<"ERROR"; else i++; } } }
一开始对于输出的内容不清楚,不知道应该怎么样进行输出,才可以正确的表示相应位置上的数据,问了一下同学,发现还是挺简单,直接把对应查询元素的r,c上的数据输出就是我们要求的元素的“位置”,不存在直接输出ERROR。
其实一开始连题目都看不太懂,看了挺多网上的知识,也看了挺多其他同学打代码的过程,思路都一样,过程也是大同小异,可以看出我的代码功底的确还很薄弱,要多打代码,加油!