#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const unsigned MaxJunc = 45;
const unsigned MaxStreet = 1995;
unsigned graph[MaxJunc][MaxStreet];
unsigned stack[MaxStreet];
unsigned juncDegree[MaxJunc];
bool hasVisited[MaxStreet];
unsigned top, maxStreetNo;
void Euler(int s)
{
int i;
for (i = 1; i <= maxStreetNo; i++){
if (graph[s][i] && !hasVisited[i]){
hasVisited[i] = true;
Euler(graph[s][i]);
stack[top++] = i;
}
}
}
int main()
{
unsigned home;
unsigned x, y, z;
int i;
while (1)
{
memset(graph, 0, sizeof(unsigned)*MaxJunc*MaxStreet);
memset(stack, 0, sizeof(unsigned)*MaxStreet);
memset(juncDegree, 0, sizeof(unsigned)*MaxJunc);
memset(hasVisited, false, sizeof(bool)*MaxStreet);
maxStreetNo = 0;
top = 0;
cin >> x >> y;
home = min(x, y);
if (x == 0 && y == 0)
break;
while (x != 0 && y != 0)
{
cin >> z;
graph[x][z] = y;
juncDegree[x]++;
graph[y][z] = x;
juncDegree[y]++;
maxStreetNo = max(maxStreetNo, z);
cin >> x >> y;
}
for (i = 1; i < MaxJunc;++i)
if (juncDegree[i] % 2)
break;
if (i < MaxJunc)
{
cout << "Round trip does not exit." << endl;
}
else
{
Euler(home);
for (i = top - 1; i >= 0; i--)
cout << stack[i] << " ";
cout << endl;
}
}
return 0;
}
欧拉回路
最新推荐文章于 2024-04-08 10:47:27 发布