#include #include using namespace std; #define MAX 50 #define TRUE 1 #define FALSE 0 int A[MAX][MAX], n, u=1; void Init(void){ freopen("D:\\G.txt","r", stdin); cin>>n; cout<<" So dinh cua do thi n = "<>A[i][j]; } } } int Kiemtra(){ int s, d; d=0; for(int i=1; i<=n;i++){ s=0; for(int j=1; j<=n;j++) s+=A[i][j];//d?m các b?c c?a các d?nh c?a d? th? if(s%2) d++; } if(d>0) return(FALSE); //N?u có 1 d?nh b?c l? thì d? th? không có chu trình Euler. return(TRUE); //N?u t?t c? các d?nh c?a d? th? là ch?n thì d? th? có th? có chu trình Euler. } void Tim(){ int v, x, top, dCE; int stack[MAX], CE[MAX]; top=1; stack[top]=u;//thêm d?nh u vào stack. dCE=0; do { v = stack[top];//l?y d?nh trên cùng c?a stack. x=1; while (x<=n && A[v][x]==0) //tìm trong danh sách nh?ng d?nh k? v?i d?nh v. x++; if (x>n) { //l?y ra kh?i stack. dCE++; CE[dCE]=v;//luu d?nh v vào m?ng k?t qu? duy?t CE. top--; } else { //d?nh x là d?nh k? v?i d?nh v. top++; stack[top]=x; A[v][x]=0; A[x][v]=0; } } while(top!=0); cout<<" Co chu trinh Euler:"; for(x=dCE; x>0; x--) cout<<(char)(CE[x] + 'a' - 1)<<" "; //in ra k?t qu? du?i d?ng char. } int main(void){ Init(); if(Kiemtra()) Tim(); else printf("\n Khong co chu trinh Euler"); _getch(); }