各種矩陣的算法

#include
#include<stdlib.h>
using namespace std;


class Symmetric
{
public:
    Symmetric()
    {
        a = new int [capacity];
        capacity = 0;
        front = area = 0;
    }
    Symmetric(int n)
    {
        capacity = n;
        front = area = 0;
        a = new int [capacity];
    }
    void push(int a1)
    {
        front = (front % capacity) + 1;
        a[front] = a1;
    }
    int pop()
    {
        area = (area % capacity) + 1;
        cout << a[area];
    }
private:
    int *a;
    int capacity;
    int front, area;
};


typedef struct element
{
    int mu, nu;
    int data;
};


int s[100] = {0};
void diagonal(int a, int n, int m)
{
    switch(n - m)
    {
    case 0:
        s[n * 3] = a;
        break;
    case 1:
        s[n * 3 - 1] = a;
        break;
    case -1:
        s[n * 3 + 1] = a;
        break;
    default:
        if(a != 0)
        {
            cout << "非對角線上的數值必須爲0" << endl;
            exit(1);
        }
    }
}
int main()
{
    int i;
    cout << "1是對稱矩陣或三角矩陣" << endl;
    cout << "2是稀疏矩陣" << endl;
    cout << "3是對角矩陣" << endl;
    cout << "4是退出程序" << endl;
    while(cin >> i)
    {
        switch(i)
        {
        case 1:
        {
            int n;
            cout << "矩陣的行數爲:" << endl;
            cin >> n;
            int str[n][n];
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    cin >> str[i][j];
                }
            }
            Symmetric p(n * (n + 1) / 2);
            int k = 0, t = 0;
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j <= i; j++)
                {
                    p.push(str[i][j]);
                    k++;
                }
            }
            for(int i = 0; i < k; i++)
            {
                p.pop();
                cout << " ";
            }
            break;
        }
        case 2:
        {
            int n;
            cout << "矩陣的行數爲:" << endl;
            cin >> n;
            int str[n][n];
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    cin >> str[i][j];
                }
            }
            element h[100];
            int k = -1;
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    if(str[i][j] != 0)
                    {
                        h[++k].data = str[i][j];
                        h[k].mu = i;
                        h[k].nu = j;
                    }
                }
            }
            for(int i = 0; i <= k; i++)
            {
                cout << "行數爲:" << h[i].mu + 1 << "列數爲:" << h[i].nu + 1 << "數值爲:" << h[i].data << endl;
            }
            break;
        }
        case 3:
        {
            int n;
            cout << "矩陣的行數爲:" << endl;
            cin >> n;
            int str[n][n];
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    cin >> str[i][j];
                }
            }
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    diagonal(str[i][j], i, j);
                }
            }
            for(int i = 0; i < n * 3 - 2; i++)
            {
                cout << s[i] << " ";
            }
            break;
        }
        case 4:
        {
            exit(1);
        }
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章