从文本文件中读取整数2d矩阵

时间:2018-03-27 13:37:08

标签: c++ arrays triangular

我被困在从文本文件中读取2D数组,但我无法做到。我有你在代码中看到的tri [] []数组数据。我需要从文本中读取它而不是在程序中定义。然后我将这些数据插入到程序中。

enter image description here

代码:

// C++ program for Dynamic
// Programming implementation of
// Max sum problem in a triangle 
#include<bits/stdc++.h>
using namespace std;
#define N 4
int sumRec[N];
bool checkPrimeNumber(int n)
{
    //cout << n;
    bool flag = true;
    for(int a = 2; a <= n/2; ++a)
    {
      if(n%a == 0)
      {
          flag = false;
      }
    }
    //if number is 1 return false. 1 is not prime
    if(n == 1)
        flag = false;
    return flag;
}


int maxPathSum(int tri[][N], int row, int col, int sum)
{
    bool isPrime = checkPrimeNumber(tri[row][col]);
    if(isPrime == true){
        //Do nothing..
    }
    else if(row + 1 >= N){
        sum = sum + tri[row][col];
     if(sumRec[col]<sum)
         sumRec[col]= sum;  
    }
    else{
        sum = sum + tri[row][col];
        maxPathSum(tri, row + 1, col, sum);
        maxPathSum(tri, row + 1, col + 1, sum);
    }
}

int main()
{
   int maxSum = 0;
   int tri[N][N] = {  {1, 0, 0, 0},
                      {8, 4, 0, 0},
                      {2, 6, 9, 0},
                      {8, 5, 9, 3}};

   maxPathSum(tri, 0, 0, 0);

    for (int i=0; i < N ; i++)
    {
        if(sumRec[i] >= maxSum)
            maxSum = sumRec[i];
    }
    cout << maxSum;
   return 0;
}

1 个答案:

答案 0 :(得分:1)

假设你事先知道N,那就不太复杂了:

int tri[N][N]
ifstream ifs("yourfile.dat");
for (size_t i=0; i < N; i ++)
  for (size_t j=0; j < N; j++) 
    ifs >> tri[i][j];

这种(简单)方法适用于以下形状的文件,换行符和空格分隔标记。 N = 5的文件看起来像:

1 2 3 4 5
2 3 4 5 6 
3 1 4 2 5
6 2 4 2 1
6 2 3 4 5

关于你的后续评论:以非常相同的方式读取三角矩阵是可能的。如上所述,该软件读取由空格,制表符,换行符或类似物分隔的任何整数序列,并不关心除此之外的格式。事实上,你可以有一个三角形文件或其他什么。但是,对于三角矩阵,2D阵列可能不是最佳存储...

具体一点:对于文件中的三角矩阵,请根据您期望的数字更改for,例如

for(i=0; i<N; i++) 
  for j=0; j <=i; j++) 
     cin >> tri[i][j];

将粗略地执行:外部超过预期的行,内部为第一个为1,第二个为2,依此类推。但是,您也可以添加

tri[j][i] = tri[i][j]; 

到循环中,以便用对角矩阵制作的对称矩阵填充方形存储空间的两边。

仍然建议您明确定义文件格式和内存存储概念,以便编写一个解析器,对于不具有正确格式和形状的文件,该解析器可能会失败。