首页 > 解决方案 > 以递归方式附加到 .csv 文件

问题描述

我有一个回溯函数,它生成重复组合,以及一些函数的附加值,它以组合值作为参数。

组合存储为向量,因此,我希望我的 csv 文件具有两列的输出,类似于此:

    vector | result
    1 1 1 1 , 0.25
    1 1 1 2 , 0.2
    …
    4 4 4 4 , 0.16

但是,我的输出被单独拆分,我只得到递归中的最后一个值,看起来像这样

A | B | C | D | E
4   4   4   4 , 0.16

这是我正在使用的功能:

void backtrack(int a[], std::vector<int> &rez, int i, int n) {

    std::ofstream f;
    f.open ("comb_unsorted.csv");

    if (rez.size() == n) {
        for (auto it = rez.begin(); it != rez.end(); it++)
            f << *it << " ";

        f << ",";
        f << function(rez);
        f << '\n';

        return;
    }

    for (int j = i; j < n; j++) {

        rez.push_back(a[j]);
        backtrack(a, rez, j, n);
        rez.pop_back();

        while (j <= n && a[j] == a[j + 1])
            j++;
    }
    f.close();
}

标签: c++filecsvvectorbacktracking

解决方案


#include <iostream>
#include <sstream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;

int function(vector<int>& rez) {
   return 1;
}

void backtrack(const int arr[], vector<int>& out, const int arrSize, const size_t maxLength) {
   // You should not do this! This is just an example!
   // In order to open/close file properly - do it outside this function and then pass std::ofstream as 5th argument
   static ofstream file("output.csv");

   if (maxLength == 1) {
      stringstream dataFromOut;
      copy(out.begin(), out.end(), ostream_iterator<int>(dataFromOut, " "));
      for (int j = 0; j < arrSize; j++)
         file << dataFromOut.str() << arr[j] << " , " << function(out) << endl;
      return;
   }
   for (int i = 0; i < arrSize; i++) {
      out.push_back(arr[i]);
      backtrack(arr, out, arrSize, maxLength - 1);
      out.pop_back();
   }
}

int main() {
   int str[] = { 1, 2, 3, 4 };
   int arrSize = 4;
   vector<int> test;
   backtrack(str, test, arrSize, arrSize);
   return 0;
}

这是输出:

1 1 1 1 , 1
1 1 1 2 , 1
1 1 1 3 , 1
1 1 1 4 , 1
1 1 2 1 , 1
1 1 2 2 , 1
1 1 2 3 , 1
1 1 2 4 , 1
1 1 3 1 , 1
1 1 3 2 , 1
1 1 3 3 , 1
1 1 3 4 , 1
1 1 4 1 , 1
1 1 4 2 , 1
1 1 4 3 , 1
1 1 4 4 , 1
1 2 1 1 , 1
1 2 1 2 , 1
1 2 1 3 , 1
1 2 1 4 , 1
1 2 2 1 , 1
1 2 2 2 , 1
1 2 2 3 , 1
1 2 2 4 , 1
1 2 3 1 , 1
1 2 3 2 , 1
1 2 3 3 , 1
1 2 3 4 , 1
1 2 4 1 , 1
1 2 4 2 , 1
1 2 4 3 , 1
1 2 4 4 , 1
1 3 1 1 , 1
1 3 1 2 , 1
1 3 1 3 , 1
1 3 1 4 , 1
1 3 2 1 , 1
1 3 2 2 , 1
1 3 2 3 , 1
1 3 2 4 , 1
1 3 3 1 , 1
1 3 3 2 , 1
1 3 3 3 , 1
1 3 3 4 , 1
1 3 4 1 , 1
1 3 4 2 , 1
1 3 4 3 , 1
1 3 4 4 , 1
1 4 1 1 , 1
1 4 1 2 , 1
1 4 1 3 , 1
1 4 1 4 , 1
1 4 2 1 , 1
1 4 2 2 , 1
1 4 2 3 , 1
1 4 2 4 , 1
1 4 3 1 , 1
1 4 3 2 , 1
1 4 3 3 , 1
1 4 3 4 , 1
1 4 4 1 , 1
1 4 4 2 , 1
1 4 4 3 , 1
1 4 4 4 , 1
2 1 1 1 , 1
2 1 1 2 , 1
2 1 1 3 , 1
2 1 1 4 , 1
2 1 2 1 , 1
2 1 2 2 , 1
2 1 2 3 , 1
2 1 2 4 , 1
2 1 3 1 , 1
2 1 3 2 , 1
2 1 3 3 , 1
2 1 3 4 , 1
2 1 4 1 , 1
2 1 4 2 , 1
2 1 4 3 , 1
2 1 4 4 , 1
2 2 1 1 , 1
2 2 1 2 , 1
2 2 1 3 , 1
2 2 1 4 , 1
2 2 2 1 , 1
2 2 2 2 , 1
2 2 2 3 , 1
2 2 2 4 , 1
2 2 3 1 , 1
2 2 3 2 , 1
2 2 3 3 , 1
2 2 3 4 , 1
2 2 4 1 , 1
2 2 4 2 , 1
2 2 4 3 , 1
2 2 4 4 , 1
2 3 1 1 , 1
2 3 1 2 , 1
2 3 1 3 , 1
2 3 1 4 , 1
2 3 2 1 , 1
2 3 2 2 , 1
2 3 2 3 , 1
2 3 2 4 , 1
2 3 3 1 , 1
2 3 3 2 , 1
2 3 3 3 , 1
2 3 3 4 , 1
2 3 4 1 , 1
2 3 4 2 , 1
2 3 4 3 , 1
2 3 4 4 , 1
2 4 1 1 , 1
2 4 1 2 , 1
2 4 1 3 , 1
2 4 1 4 , 1
2 4 2 1 , 1
2 4 2 2 , 1
2 4 2 3 , 1
2 4 2 4 , 1
2 4 3 1 , 1
2 4 3 2 , 1
2 4 3 3 , 1
2 4 3 4 , 1
2 4 4 1 , 1
2 4 4 2 , 1
2 4 4 3 , 1
2 4 4 4 , 1
3 1 1 1 , 1
3 1 1 2 , 1
3 1 1 3 , 1
3 1 1 4 , 1
3 1 2 1 , 1
3 1 2 2 , 1
3 1 2 3 , 1
3 1 2 4 , 1
3 1 3 1 , 1
3 1 3 2 , 1
3 1 3 3 , 1
3 1 3 4 , 1
3 1 4 1 , 1
3 1 4 2 , 1
3 1 4 3 , 1
3 1 4 4 , 1
3 2 1 1 , 1
3 2 1 2 , 1
3 2 1 3 , 1
3 2 1 4 , 1
3 2 2 1 , 1
3 2 2 2 , 1
3 2 2 3 , 1
3 2 2 4 , 1
3 2 3 1 , 1
3 2 3 2 , 1
3 2 3 3 , 1
3 2 3 4 , 1
3 2 4 1 , 1
3 2 4 2 , 1
3 2 4 3 , 1
3 2 4 4 , 1
3 3 1 1 , 1
3 3 1 2 , 1
3 3 1 3 , 1
3 3 1 4 , 1
3 3 2 1 , 1
3 3 2 2 , 1
3 3 2 3 , 1
3 3 2 4 , 1
3 3 3 1 , 1
3 3 3 2 , 1
3 3 3 3 , 1
3 3 3 4 , 1
3 3 4 1 , 1
3 3 4 2 , 1
3 3 4 3 , 1
3 3 4 4 , 1
3 4 1 1 , 1
3 4 1 2 , 1
3 4 1 3 , 1
3 4 1 4 , 1
3 4 2 1 , 1
3 4 2 2 , 1
3 4 2 3 , 1
3 4 2 4 , 1
3 4 3 1 , 1
3 4 3 2 , 1
3 4 3 3 , 1
3 4 3 4 , 1
3 4 4 1 , 1
3 4 4 2 , 1
3 4 4 3 , 1
3 4 4 4 , 1
4 1 1 1 , 1
4 1 1 2 , 1
4 1 1 3 , 1
4 1 1 4 , 1
4 1 2 1 , 1
4 1 2 2 , 1
4 1 2 3 , 1
4 1 2 4 , 1
4 1 3 1 , 1
4 1 3 2 , 1
4 1 3 3 , 1
4 1 3 4 , 1
4 1 4 1 , 1
4 1 4 2 , 1
4 1 4 3 , 1
4 1 4 4 , 1
4 2 1 1 , 1
4 2 1 2 , 1
4 2 1 3 , 1
4 2 1 4 , 1
4 2 2 1 , 1
4 2 2 2 , 1
4 2 2 3 , 1
4 2 2 4 , 1
4 2 3 1 , 1
4 2 3 2 , 1
4 2 3 3 , 1
4 2 3 4 , 1
4 2 4 1 , 1
4 2 4 2 , 1
4 2 4 3 , 1
4 2 4 4 , 1
4 3 1 1 , 1
4 3 1 2 , 1
4 3 1 3 , 1
4 3 1 4 , 1
4 3 2 1 , 1
4 3 2 2 , 1
4 3 2 3 , 1
4 3 2 4 , 1
4 3 3 1 , 1
4 3 3 2 , 1
4 3 3 3 , 1
4 3 3 4 , 1
4 3 4 1 , 1
4 3 4 2 , 1
4 3 4 3 , 1
4 3 4 4 , 1
4 4 1 1 , 1
4 4 1 2 , 1
4 4 1 3 , 1
4 4 1 4 , 1
4 4 2 1 , 1
4 4 2 2 , 1
4 4 2 3 , 1
4 4 2 4 , 1
4 4 3 1 , 1
4 4 3 2 , 1
4 4 3 3 , 1
4 4 3 4 , 1
4 4 4 1 , 1
4 4 4 2 , 1
4 4 4 3 , 1
4 4 4 4 , 1

推荐阅读