Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Mã nguồn C | Chu trình Euler !

  1. #1
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Mặc định Mã nguồn C | Chu trình Euler !

    Thuât toán chu trình Euler:
    C Code:
    1. #include<iostream.h>
    2. #include<malloc.h>
    3. #include<conio.h>
    4. #include<stdio.h>
    5. #include<ctype.h>
    6.  
    7. #define max 20
    8. typedef struct Dinh
    9. {
    10.     int data;
    11.     Dinh *next;
    12. }DINH;
    13.  
    14. DINH *G[max];
    15. int n;
    16. DINH *topI;
    17. int top()
    18. {
    19.     return topI->data;
    20. }
    21.  
    22. // CAP PHAT
    23. DINH *capPhat()
    24. {
    25.     DINH *p;
    26.     p=(DINH*) malloc(sizeof(DINH));
    27.     return p;
    28. }
    29. // KHOI TAO GIA TRI BAN DAU
    30. void khoiTao()
    31. {
    32.     printf("Nhap so dinh : ");
    33.     scanf("%d",&n);
    34.     //Khoi tao mang G
    35.     for (int i=1;i<=n;i++)
    36.     {
    37.         G[i]=capPhat();
    38.         G[i]->data=i;
    39.         G[i]->next=NULL;
    40.     }
    41. }
    42. // CHEN CAC DINH KE VAO G[Ii]
    43. void dSKeDinh(int i)
    44. {
    45.     DINH *p;
    46.     char t;
    47.     int temp;
    48.     do
    49.     {
    50.         p=capPhat();
    51.         printf("\n------------------------------ Dinh ke voi dinh %d : ",i);
    52.         scanf("%d",&temp);
    53.         p->data=temp;
    54.         p->next=G[i]->next;
    55.         G[i]->next=p;
    56.         printf("Nhap tiep tuc khong? (c/k)");
    57.         t=toupper(getche());//toupper: Ham chuyen sang chu HOA
    58.     }while (t=='C');
    59.     printf("\n");
    60. }
    61. //NHAP DL
    62. void nhapDL()
    63. {
    64.     khoiTao();
    65.     for (int i=1;i<=n;i++)
    66.         dSKeDinh(i);
    67. }
    68. //IN DS DINH KE RA MAN HINH
    69. void inDSKeDinh(int i)
    70. {
    71.     DINH *p;
    72.     p=G[i];
    73.     while(p)
    74.     {
    75.         printf("%5d",p->data);
    76.         p=p->next;
    77.     }
    78. }
    79. //HAM IN DANH SACH G
    80. void inDL()
    81. {
    82.     for (int i=1;i<=n;i++)
    83.     {
    84.         inDSKeDinh(i);
    85.         printf("\n");
    86.     }
    87. }
    88.  
    89. void taoStack()
    90. {
    91.     topI=NULL;
    92. }
    93.  
    94. int stackRong()
    95. {
    96.     return (topI==NULL);
    97. }
    98.  
    99. int pop()//Lay nhan cua dinh <= stack
    100. {
    101.     DINH *p;
    102.     int temp;
    103.     if(stackRong())
    104.         return 0;
    105.     p=topI;
    106.     temp=p->data;
    107.     topI=p->next;
    108.     free(p);
    109.     return temp;
    110. }
    111. void push(int i)
    112. {
    113.     DINH *p;
    114.     p=capPhat();
    115.     p->data=i;
    116.     p->next=topI;
    117.     topI=p;
    118. }
    119.  
    120.  
    121. int Bac[max],CE[max];
    122. //TINH TONG SO BAC
    123. void tinhBac()
    124. {
    125.     int i;
    126.     DINH *p;
    127.     for(i=1;i<=n;i++)
    128.     {
    129.         Bac[i]=0;
    130.         p=G[i]->next;
    131.         while(p)
    132.         {
    133.             ++Bac[i];
    134.             p=p->next;
    135.         }
    136.     }
    137. }
    138. //KIEM TRA G LA EULER
    139. int laEuler()
    140. {
    141.     int i=1,stop=0;
    142.     while(i<=n && !stop)
    143.     {
    144.         if(Bac[i]<2 || Bac[i]%2==1)
    145.             stop=1;
    146.         ++i;
    147.     }
    148.     if(stop)
    149.         return 0;//Khong la Euler
    150.     return 1;
    151. }
    152. //TIM CHU TRINH EULER
    153. void Euler(int i)
    154. {
    155.     DINH *p,*q;
    156.     int x,y;
    157.     taoStack();
    158.     int dem=0;
    159.     push(i);
    160.     while(!stackRong())
    161.     {
    162.         x=top();
    163.         p=G[x]->next;
    164.         if(p)
    165.         {
    166.             y=p->data;
    167.             push(y);
    168.             //Loai y khoi Ke(x)
    169.             G[x]->next=p->next;
    170.             free(p);
    171.             //Loai x khoi Ke(y)
    172.             q=G[y];
    173.             p=G[y]->next;
    174.             while(p->data!=x)
    175.             {
    176.                 q=p;
    177.                 p=p->next;
    178.             }
    179.         //  if(q==G[y])
    180.         //  {
    181.         //      G[y]->next=p->next;
    182.         //      free(p);
    183.         //  }
    184.         //  else
    185.         //  {
    186.                 q->next=p->next;
    187.                 free(p);
    188.         //  }
    189.         }
    190.         else
    191.         {
    192.             x=pop();
    193.             CE[++dem]=x;
    194.         }
    195.     }
    196.     printf("--> Chu trinh Euler : ");
    197.     for (int j=1;j<=dem;j++)
    198.         printf("%d ",CE[j]);
    199.     printf("\n");
    200. }
    201.  
    202. int main()
    203. {
    204.     int i;
    205. //  clrscr();
    206.     nhapDL();
    207.     inDL();
    208.     tinhBac();
    209.     if(laEuler())
    210.     {
    211.         printf(" -------------------\n");
    212.         printf(" | DO THI LA EULER |\n");
    213.         printf(" -------------------\n");
    214.         printf("Tim chu trinh Euler tu dinh : ");
    215.         scanf("%d",&i);
    216.         printf("\n");
    217.         Euler(i);
    218.     }
    219.     else
    220.     {
    221.         printf(" -------------------------\n");
    222.         printf(" | DO THI KHONG LA EULER |\n");
    223.         printf(" -------------------------\n");
    224.     }
    225.     getch();
    226.     return 0;
    227. }
    Mong mọi người góp ý thêm ha
    Không biết ghi gì luôn ...

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Bạn ơi có thể giải thích cho mình cái hàm tìm chu trình euler từ 1 điểm cho trước nó hoạt động dựa trên giải thuật nào ko?
    ttecak ?

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi comeonbaby Xem bài viết
    Bạn ơi có thể giải thích cho mình cái hàm tìm chu trình euler từ 1 điểm cho trước nó hoạt động dựa trên giải thuật nào ko?
    Comeon xem lại bài giải thuật của tác giả Lê Minh Hoàng nha. Xem lại thì thấy dễ hiểu hơn.
    Thân !!!
    Không biết ghi gì luôn ...

Các đề tài tương tự

  1. tìm chu trình euler với lập trình C
    Gửi bởi thanhhai trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 01-06-2012, 11:19 AM
  2. Kỹ thuật C++ Làm sao để đánh dấu đường đã đi qua trong chu trình Euler?
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 13-06-2010, 11:53 AM
  3. <Bài toán ghép chữ dùng chu trình Euler>
    Gửi bởi anhoa1608 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-09-2009, 09:13 AM
  4. Đồ thị Euler. Toán rời rạc viết bằng C
    Gửi bởi kimtaitokk trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 08-04-2009, 04:58 PM
  5. code tìm chu trình euler bằng đệ quy
    Gửi bởi mylinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 30-05-2008, 08:06 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn