⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 陈慧-5分.txt

📁 这是很不错的计算机算法
💻 TXT
字号:

/*矩阵特征值问题*/
/*本程序在vc++6.0上运行通过,并用 cl.exe 编译通过*/
#include<fstream.h>
#include<stdlib.h>
void readfile(int&,int*&);
void fpshuzhu(int,int**&);
void matrix(int*,int,int**&);
int max(int,int,int);

int main()
{
  int n;//矩阵个数 
  int *p;//矩阵维数 
  int **m;//数组,存储最大特征值              
  readfile(n,p);//从input.txt中读取各个值
  fpshuzhu(n,m);//分配数组m
  matrix(p,n,m);//计算数组m的各个值 
  ofstream out("output.txt");
  out<<m[1][n];//将最大特征值输出到文件 
  out.close();
  delete[] p;//释放数组p所占内存 
  for(int i=0;i<n+1;i++)//释放数组m所占内存 
    delete[] m[i];
  delete[] m;
  return 0;
}

void readfile(int& n,int*& p)
{ 
  int i;//循环控制变量 
  ifstream fin("input.txt",ios::nocreate);//打开输入文件
  if(!fin) 
  {
    cerr<<"文件不存在!";
    exit(-1);
  } 
  fin>>n;//读出n 
  if(!(p=new int[n+1]))
  {
    cerr<<"内存分配失败!"<<endl;
    exit(-1);
  }
  for(i=0;i<=n;i++)//读出维数p 
    fin>>p[i];
  fin.close();//关闭输入文件 
}


void fpshuzhu(int n,int**& m)
{
  if(!(m=new int*[n+1]))//为数组m分配空间
  {
    cerr<<"内存分配失败!"<<endl;//分配不成功,退出
    exit(-1);
  }
  for(int i=0;i<n+1;i++)
    if(!(m[i]=new int[n+1]))//为每个一维数组分配空间
    {
      cerr<<"内存分配失败!"<<endl;//分配不成功,退出
      delete[] m;
      exit(-1);
    }
}


void matrix(int* p,int n,int**& m)
{ 
  int i,r,k;//循环控制变量 
  for(i=1;i<=n;i++) m[i][i]=0;
  for(r=2;r<=n;r++)
    for(i=1;i<=n-r+1;i++)
    {
      int j=i+r-1;
      m[i][j]=m[i+1][j]+3*max(p[i-1],p[i],p[j])-p[i-1]-p[i]-p[j];//求得在第一个矩阵处断开的特征值 
      for(k=i+1;k<j;k++)//考虑在其他处断开 
      {
        int t=m[i][k]+m[k+1][j]+3*max(p[i-1],p[k],p[j])-p[i-1]-p[k]-p[j];//求得此时的特征值 
        if(t>m[i][j]) m[i][j]=t;//取较大值 
      }
    }
}


int max(int a,int b,int c)//取三个整数的最大值 
{
  int temp;
  temp=a>b?a:b;
  temp=temp>c?temp:c;
  return temp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -