热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

堆栈队列和数组行逻辑链接稀疏矩阵

#include#include#includewindows.husingnamespacestd;structTripple{intx,y,value;};structRL
#include
#include 
#include"windows.h"
using namespace std;
struct Tripple
{
    int x,y,value;
};
struct RLSMatrix
{
    int r,c,cnt;
    Tripple* tripples;
    int* rpos;
};

RLSMatrix* createRLSMatrix(int r,int c,int maxCnt)
{
    RLSMatrix* p = (RLSMatrix*)malloc(sizeof(RLSMatrix));
    p->r=r;
    p->c=c;
    p->cnt=0;
    p->tripples=new Tripple[maxCnt];
    p->rpos=new int[p->r+1];
    p->rpos[0]=0;
    return p;
}
RLSMatrix* transpose(RLSMatrix*  src)
{
    RLSMatrix* ans =createRLSMatrix(src->c,src->r,src->cnt);
    int* ccnts = new int[src->c+1];
    int* cpos = new int[src->c+1];
    cpos[0]=0;
    for(int i=0;i<=src->c;i++)
        ccnts[i]=0;
    for(int i=0;icnt;i++)
        ccnts[src->tripples[i].y]++;
    for(int i=1;i<=src->c;i++)
    {
        ans->rpos[i]=ans->rpos[i-1]+ccnts[i-1];
        cpos[i] = ans->rpos[i];
    }

    delete[] ccnts;
    Tripple newTripple;
    for(int i=0;icnt;i++)
    {
        newTripple.x=src->tripples[i].y;
        newTripple.y=src->tripples[i].x;
        newTripple.value=src->tripples[i].value;
        ans->tripples[cpos[newTripple.x]++]=newTripple;
        ans->cnt++;
    }
    return ans;
}
void output(RLSMatrix* src)
{
    int cur=0;
    for(int i=1;i<=src->r;i++)
    {
        for(int j=1;j<=src->c;j++)
        {
            if(src->tripples[cur].x==i && src->tripples[cur].y==j)
            {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//彰显非0元
                cout<tripples[cur].value<<"   ";
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);//设置三色相加
                cur++;
            }
            else cout<<"0   ";
        }
        cout<<endl;
    }
}
void main()
{
     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);//设置三色相加
     int r=11,c=18,maxCnt=45;
     RLSMatrix* m= createRLSMatrix(r,c,maxCnt);
     int lstR=0;
     for(int i=1;i<=r;i++)
     {
         for(int j=1;j<=c;j++)
         {
             if(rand()%10==1 && m->cnt<maxCnt)
             {
                 m->tripples[m->cnt].x=i;
                 m->tripples[m->cnt].y=j;
                 m->tripples[m->cnt].value=rand()%10;
                 if(i!=lstR)
                      m->rpos[i]=m->cnt;
                 m->cnt++;
             }
         }
         lstR=i;
     }
     output(m);
     cout<<endl;
     output(transpose(m));
     cin>>r;
}

堆栈队列和数组-行逻辑链接稀疏矩阵


推荐阅读
author-avatar
手浪用户2602922465
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有