稀疏矩阵

相关网站: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。

其实一开始连题目都看不太懂,看了挺多网上的知识,也看了挺多其他同学打代码的过程,思路都一样,过程也是大同小异,可以看出我的代码功底的确还很薄弱,要多打代码,加油!

 

posted on 2019-04-14 21:16  瓦砾之空  阅读(219)  评论(1编辑  收藏  举报