Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186581
  • 博文数量: 50
  • 博客积分: 2567
  • 博客等级: 少校
  • 技术积分: 495
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:44
文章分类

全部博文(50)

文章存档

2011年(3)

2010年(29)

2009年(11)

2008年(7)

我的朋友

分类: C/C++

2010-06-21 22:49:46

说明:矩阵在data.txt文件中,用空格分开;width 是矩阵的宽度,根据情况改变。

//版本2
#include
#include
#include

using namespace std;
#define width    6

void cal(int ** arr1, int ** arr2, int ** ret);
void print(int ** ret);

void main()
{

    ifstream fin("data.txt");
    string s;
    int i,j,k;

    //申请资源
    int ***ret = new int**[width];
    for(i=0;i    {
        ret[i] = new int*[width];
        for(j=0;j            ret[i][j] = new int[width];
    }

    i = 0;
    j = 0;
    while(fin>>s)
    {
        ret[0][i][j] = atoi(s.c_str());    //读取文件数据装入数组

        j++;
        if(j == width)
        {
            i++;
            j = 0;
        }
    }


    //计算两个矩阵的行列式
    for(i=0;i        cal(ret[0],ret[i],ret[i+1]);

    //计算距离矩阵(从i到j需要的最短跳数)
    int **dis = new int*[width];
    for(i=0;i        dis[i] = new int[width];
    for(i=0;i    {
        for(j=0;j        {
            if(i==j)
            {
                dis[i][j] = 0;
            }
            else
            {
                for(k=0;k                {
                    if(ret[k][i][j]!=0)
                    {
                        dis[i][j] = k+1;
                        break;
                    }
                }

                if(k==width)
                    dis[i][j] = -1;
            }
        }
    }

    //打印各阶矩阵值
    for(i=0;i    {
        cout<        print(ret[i]);
        cout<    }

    //打印距离矩阵
    cout<<"Distance:"<    print(dis);
    cout<

    //释放资源
    for(i=0;i    {
        for(j=0;j            delete [] ret[i][j];
        delete [] ret[i];
    }
    delete [] ret;

    delete []dis;


}

//计算两个矩阵的行列式
void cal(int ** arr1, int ** arr2, int ** ret)
{
    int temp;
    for(int i=0;i        for(int j=0;j        {
            temp = 0;
            for(int k = 0;k                temp +=arr1[i][k]*arr2[k][j];
            ret[i][j] = temp;
        }
   
}

//打印矩阵的值
void print(int ** ret)
{
    for(int i=0;i    {
        for(int j=0;j        {
            cout<        }
        cout<    }
}

//--------------------------------------
//版本1
#include
#include
#include

using namespace std;
#define width    6

void cal(int ** arr1, int ** arr2, int ** ret);
void print(int ** ret);

void main()
{
#if 0
    ifstream fin("data.txt");
    const int LINE_LENGTH = 100;
    char str[LINE_LENGTH];
    while(fin.getline(str,LINE_LENGTH))
    {
        cout<<"read from file:"<    }
#endif

#if 0
    ifstream fin("data.txt");
    string s;
    while(getline(fin,s))
    {
        cout<<"read from file:" <    }
#endif

#if 1
    ifstream fin("data.txt");
    string s;
    int i,j;

    int **arr = new int*[width];
    for(i=0;i        arr[i] = new int[width];

    i = 0;
    j = 0;
    while(fin>>s)
    {
    //    cout<        arr[i][j] = atoi(s.c_str());  //读取文件数据装入数组

        j++;
        if(j == width)
        {
            i++;
            j = 0;
        }
    }

    int **ret2 = new int*[width];
    int **ret3 = new int*[width];
    int **ret4 = new int*[width];
    int **ret5 = new int*[width];
    int **ret6 = new int*[width];
    for(i=0;i    {
        ret2[i] = new int[width];
        ret3[i] = new int[width];
        ret4[i] = new int[width];
        ret5[i] = new int[width];
        ret6[i] = new int[width];
    }
    cal(arr,arr,ret2);
    cal(arr,ret2,ret3);
    cal(ret2,ret2,ret4);
    cal(ret2,ret3,ret5);
    cal(ret3,ret3,ret6);

    cout<<"1:"<    print(arr);
    cout<<"\n2:"<    print(ret2);
    cout<<"\n3:"<    print(ret3);
    cout<<"\n4:"<    print(ret4);
    cout<<"\n5:"<    print(ret5);
    cout<<"\n6:"<    print(ret6);

    for(i = 0;i    {
        delete [] arr[i];
        delete [] ret2[i];
        delete [] ret3[i];
        delete [] ret4[i];
        delete [] ret5[i];
        delete [] ret6[i];
    }
    delete []arr;
    delete []ret2;
    delete []ret3;
    delete []ret4;
    delete []ret5;
    delete []ret6;
#endif


}

//----------
void cal(int ** arr1, int ** arr2, int ** ret)
{
    int temp;
    for(int i=0;i        for(int j=0;j        {
            temp = 0;
            for(int k = 0;k                temp +=arr1[i][k]*arr2[k][j];
            ret[i][j] = temp;
        }
    
}

void print(int ** ret)
{
    for(int i=0;i    {
        for(int j=0;j        {
            cout<        }
        cout<    }
}
阅读(1994) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~