欧拉回路

来源:互联网 发布:数据库无法登陆 编辑:程序博客网 时间:2024/04/27 17:11
#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;}

0 0
原创粉丝点击