【问题标题】:Read integer 2d matrix from text file从文本文件中读取整数二维矩阵
【发布时间】:2018-03-27 13:37:08
【问题描述】:

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

代码:

// 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;
}

【问题讨论】:

  • 建议:展示你的作品。如果你有 5 天的研究并且失败的尝试包括最有希望的。避免在帖子中使用图片。除非问题是关于图像(错误位置的像素、错误颜色)或图像描述了难以用文本表示的内容(例如复杂的图表),否则请使用文本。 Use caution with using namespace std;。不要包含来自bits 的任何内容。它们是实现标头,不用于直接包含。
  • 哇,搜索了 5 天。我搜索了“c++ 读取文件矩阵”并得到了一堆回复。搜索“c++ read file array 2d”可以得到很多回复。

标签: c++ arrays triangular


【解决方案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

关于您的后续评论:读取三角矩阵的方式几乎相同。如前所述,该软件读取由空格、制表符、换行符或类似内容分隔的任何整数序列,并且不关心除此之外的格式。事实上,你可以有一个三角形文件或其他任何东西。然而,对于三角矩阵,二维数组可能不是最佳存储...

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

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

大致会这样做:外部的 for 超出预期的行,内部的第一个为 1,第二个为 2,依此类推。但是,您也可以添加一个

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

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

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

【讨论】:

  • @user4581301 我真的很感谢您的回复。问题是第一行有一个元素,第二行是两个元素,第三行有树元素,如下所示。我需要从文本文件中读取它。如果您在空白处写入零以平衡行和列,则您的答案正确读取。但不允许写零。
  • 刚刚更新了答案以具体涵盖三角矩阵。
猜你喜欢
  • 2013-03-13
  • 2017-08-23
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多