資料結構之特殊矩陣的逆向轉換
阿新 • • 發佈:2018-12-16
說明:
特殊矩陣的逆向轉換是指給你一個一維陣列,讓你轉換成特殊矩陣的形式,並輸出。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、對稱矩陣
程式碼
#include<iostream> using namespace std; #define N 20 int a[N*(N+1)/2]; int matrix[N][N]; int n; void Transform(){ int i=0,j=0,k=0; for(;k<n*(n+1)/2;k++){ matrix[i][j]=a[k]; if(i==j) {i++;j=0;} else{ matrix[j][i]=a[k]; j++; } } } int main(){ cout<<"請輸入對稱矩陣的邊長: "; cin>>n; cout<<endl<<"請輸入"<<n*(n+1)/2<<"個數:"<<endl; for(int i=0;i<n*(n+1)/2;i++) cin>>a[i]; cout<<endl<<"對稱矩陣為:"<<endl; Transform(); bool flag=1; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(flag){ cout<<matrix[i][j]; flag=0; } else cout<<' '<<matrix[i][j]; } flag=1; cout<<endl; } return 0; }
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、三角矩陣
三角矩陣分上下兩種三角矩陣,上三角矩陣如上圖所示,下三角矩陣反之。
程式碼
#include<iostream> using namespace std; #define N 20 int a[N*(N+1)/2]; int matrix[N][N]; int n,c; void Upper(){ int i=0,j=0,k=0; for(;k<n*(n+1)/2;k++){ matrix[i][j]=a[k]; if(i==j) {i++;j=0;} else{ matrix[j][i]=c; j++; } } } void Lower(){ int i=0,j=0,k=0; for(;k<n*(n+1)/2;k++){ matrix[i][j]=a[k]; if(j==n-1) {i++;j=i;} else j++; if(i!=j) matrix[j][i]=c; } } int main(){ cout<<"請輸入三角矩陣的邊長: "; cin>>n; cout<<endl<<"請輸入"<<n*(n+1)/2<<"個數:"<<endl; for(int i=0;i<n*(n+1)/2;i++) cin>>a[i]; cout<<"請輸入常數c:"; cin>>c; a[n*(n+1)/2]=c; bool flag=1; cout<<endl<<"上三角矩陣為:"<<endl; Upper(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(flag){ cout<<matrix[i][j]; flag=0; } else cout<<' '<<matrix[i][j]; } flag=1; cout<<endl; } cout<<"下三角矩陣為:"<<endl; Lower(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(flag){ cout<<matrix[i][j]; flag=0; } else cout<<' '<<matrix[i][j]; } flag=1; cout<<endl; } return 0; }
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、三對角矩陣
三角矩陣相對複雜,情況多樣,這裡列舉三對角矩陣,如下圖所示:
程式碼
#include<iostream> using namespace std; #define N 20 int a[N*(N+1)/2]; int matrix[N][N]; int n; void Transform(){ int i=0,j=0,k=0; for(;k<n*3-2;k++){ matrix[i][j]=a[k]; if(i==0&&j==1) {i++;j=0;} else j++; if(j==i+2) {i++;j=i-1;} } } int main(){ cout<<"請輸入三對角矩陣的邊長: "; cin>>n; cout<<endl<<"請輸入"<<n*3-2<<"個數:"<<endl; for(int i=0;i<n*3-2;i++) cin>>a[i]; cout<<endl<<"三對角矩陣為:"<<endl; Transform(); bool flag=1; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(flag){ cout<<matrix[i][j]; flag=0; } else cout<<' '<<matrix[i][j]; } flag=1; cout<<endl; } return 0; }