В настоящее время я пытаюсь сделать Проблема Клики и столкнулся с проблемой. Я читаю график из файла, но файл соответствует определенному формату:
c File p_hat1500-1.clq
c
c
p edge 1500 284923
e 4 1
e 5 3
e 5 4
e 6 2
Перед каждой строкой стоит буква, обозначающая, что находится в этой строке (будь то комментарий (с) или ребро (е)), я пытаюсь выяснить, как я могу прочитать файл и игнорировать все элементы, кроме ребра цифры, чтобы вместо этого читалось так:
4 1
5 3
5 4
6 2
Пока что я просто читаю файл так:
ifstream file("graph.clq");
и загрузка
file >> n;
Попробуй это
#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;
}
Других решений пока нет …