範例程式碼 uva302
//uva302
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<vector>
#include<queue>
#include<list>
#include<algorithm>
#define SIZE 50
#define BIG 2000
using namespace std;
struct road{
int cnt, good;
road(int num = 0, int v = 0) : cnt(num), good(v) {}
bool operator < (const road & e) const {
return cnt >= e.cnt;
}
};
int cari[BIG];
priority_queue<road> g[SIZE];
list<int> bvc(int x) {
list<int> rail, form;
while (!g[x].empty()) {
road aux = g[x].top();
g[x].pop();
if (cari[aux.cnt])
continue;
cari[aux.cnt] = 1;
form = bvc(aux.good);
rail.splice(rail.begin(), form);
rail.push_front(aux.cnt);
}
return rail;
}
int main() {
int a, b, c, dig, go = 0, map[SIZE];
bool check;
while (cin >> a >> b) {
if (a == 0 || b == 0)
break;
dig = 0;
memset(map, 0, sizeof(map));
memset(cari, 0, sizeof(cari));
cin >> c;
for (int i = 0; i < SIZE; i++)
while (!g[i].empty())
g[i].pop();
road e1(c, b);
g[a].push(e1);
road e2(c, a);
g[b].push(e2);
map[a]++; map[b]++;
dig = max(dig, max(a, b));
go = min(a, b);
while (cin >> a >> b) {
if (a == 0 || b == 0)
break;
cin >> c;
road e3(c, b);
road e4(c, a);
g[b].push(e4);
g[a].push(e3);
map[a]++; map[b]++;
dig = max(dig, max(a, b));
}
check = true;
for (int i = 0; i <= dig; i++)
if (map[i] & 1)
check = false;
if (check == false) {
cout << "Round trip does not exist." << endl;
cout << endl;
}
else {
list<int> tail = bvc(go);
for (list<int>::iterator it = tail.begin(); it != tail.end(); it++){
if (it != tail.begin())
cout << " ";
cout << *it;
}
puts("\n");
}
}
return 0;
}