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;
}
文章標籤
全站熱搜