Я сделал алгоритм Эйлера пути (Эйлер-путь). в чем проблема?
Я сделал алгоритм пути Эйлера , в чем проблема?
#include <cstdio>
#include <vector>
#include <iostream>
#include <list>
using namespace std;
int graph[1000][1000]; // 1<n<1000
int n; // 그래프는 n x n
int i, j, degree[1000] = {},f=1;
list<int> lt1;
void oiler(int u) {
for(int v=0;v<n;v++){
while (graph[u][v]>0) {
graph[u][v]--;
graph[v][u]--;
oiler(v);
}
}
lt1.push_back(u);
}
int main(void) {
cin >> n;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cin >> graph[i][j];
sum += graph[i][j];
}
}
oiler(0);
lt1.reverse();
list<int>::iterator iter = lt1.begin();
for(iter=lt1.begin(); iter!=lt1.end(); iter++)
{
printf("%d ", *iter+1);
}
}
ввод
6
0 1 0 1 1 1
1 0 1 1 1 0
0 1 0 1 0 0
1 1 1 0 1 0
1 1 0 1 0 1
1 0 0 0 1 0
выход
1 2 3 4 1 5 2 4 5 6 1
он работает и выдает истинный результат, но не прошел ... дайте мне знать, если я что-то пропустил
2 ответа
Вам не хватает определения
sum
, это не может быть скомпилировано. Вы его инициализировали? Вы намеревались добавить 1 к каждому элементу:
*iter+1
?
Также вы тратите время на изменение списка. Вы просто можете использовать
push_front
для
std::list
. В других случаях вы также можете выполнить итерацию в обратном порядке. В C ++ 20 с его
std::views::
// needs #include <ranges>
for (auto const& item : lt1| std::views::reverse) {
std::cout << item << " ";
}
В C++11:
for (auto iter = lt1.rbegin(), ei = lt1.rend(); iter != ei; ++iter) {
std::cout << *iter << " ";
}
Для многократного использования есть способ сделать это через переходники .
Я предполагаю, что вы занимаетесь онлайн-программированием и некоторые видимые тесты проходят, но весь набор тестов не работает, верно? Обновите описание проблемы, чтобы прояснить, в чем заключается ваша ошибка.
Тем не менее,
for(iter=lt1.begin(); iter!=lt1.end(); iter++)
{
printf("%d ", *iter+1);
}
- плохая идея, так как вы пытаетесь читать дальше конца списка. Вы не найдете там значимых данных, особенно если список пуст (n==0).
Пытаться
for (auto const& item : lt1)
{
std::cout << item;
}