我目前正在尝试Clique Problem并遇到了一个问题。我正在从文件中读取图形,但文件遵循特定格式:
c File p_hat1500-1.clq
c
c
p edge 1500 284923
e 4 1
e 5 3
e 5 4
e 6 2
在每一行之前是一个字母,表示该行上的内容(无论是注释(c)还是边缘(e)),我试图找出如何读取文件并忽略所有元素从边数开始,这样就可以这样读:
4 1
5 3
5 4
6 2
到目前为止,我只是在阅读这样的文件:
ifstream file("graph.clq");
并加载
file >> n;
答案 0 :(得分:1)
试试这个
#include <vector>
#include <iostream>
#include <utility>
#include <fstream>
#include <string>
using std::cout;
using std::endl;
using std::cerr;
using std::vector;
using std::string;
vector<std::pair<int, int>> read_graph_file(const string& file);
int main() {
auto edges = read_graph_file("input.txt");
for (auto edge : edges) {
cout << edge.first << " " << edge.second << endl;
}
return 0;
}
vector<std::pair<int, int>> read_graph_file(const string& file) {
auto fin = std::ifstream{file.c_str()};
if (!fin) {
throw std::runtime_error{"Could not open file"};
}
auto edges = vector<std::pair<int, int>>{};
auto input_type = char{};
while (fin >> input_type) {
if (input_type != 'e') {
while (fin.get() != '\n') {}
} else {
auto edge = std::pair<int, int>{};
fin >> edge.first >> edge.second;
edges.push_back(edge);
}
}
return edges;
}