close
#include <iostream>
using namespace std;
//稀疏矩陣(sparse matrix)--->0的個數大於(1/2)*n   n為矩陣所有元素 
int main(){
int sparsematrix[6][6]={{0,15,0,0,-8,0},{0,0,6,7,0,0},{0,0,0,-6,0,0},{0,0,18,0,0,0},{0,0,0,0,0,16},{72,0,0,0,20,0}};
int value[7],k=0;
int n,m;
  int sm[3][3];
for(int i=0;i<6;i++) //6列 
{
for(int j=0;j<6;j++) //6行 
{
if(sparsematrix[i][j]==0) //0的話就繼續迴圈 
continue;
else
{
value[k]=sparsematrix[i][j]; //將非0值給 value陣列 
k++;//value陣列元素+1 
}
}
}
cout<<"稀疏陣列裡非零的值:";
for(int i=0;i<k;i++)//印出value 
cout<<value[i]<<" ";
cout<<endl;
k=0; //重新跑value陣列 
for(int i=0;i<3;i++)//sm為3X3的二維陣列 
{
for(int j=0;j<3;j++)
{
sm[i][j]=value[k];// 鎮value值給sm 
k++;// value陣列元素+1
}
}
//印出sm陣列 
cout<<"將非零值轉成二維陣列:\n";
 for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<sm[i][j]<<" "; 
k++;
}
cout<<endl;
}
 
//還原稀疏矩陣 
int num[10][3]={{6,6,9},  //i=6 j=6,9個非零值 
{0,1,15},  //(0,1)=15 
{0,4,-8}, //(0,4)=-8 
{1,2,6}, //(1,2)=6 
{1,3,7}, //(1,3)=7 
{2,3,-6}, //(2,3)=-6 
{3,2,18}, //(3,2)=18 
{4,5,16}, //(4,5)=16 
{5,0,72}, //(5,0)=72 
{5,4,20}}; //(5,4)=20 

    k = 1; //從第一列開始 
    cout<<"還原稀疏陣列:\n";
    for(int i = 0; i < num[0][0]; i++)   //NUM[0][0]為i=6列 
        for(int j = 0; j < num[0][1]; j++) //NUM[0][1]為i=6行 
            if( i == num[k][0]  && //K列第1行 
              j == num[k][1]  && //K列第2行
  k <= num[0][2]  )//1列第3行==>9 
                printf("%3d ",num[k][2]);  //印出每列的第3行值 
                k++;    
            } 
            else 
                printf("%3d ",0); //其他陣列無值==0 
        }         cout<<"\n";
    } 
system("pause");
return 0;
}


arrow
arrow
    文章標籤
    資料結構    ByC++ 自學
    全站熱搜
    創作者介紹
    創作者 a51590 的頭像
    a51590

    a51590的部落格

    a51590 發表在 痞客邦 留言(0) 人氣()