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

Đề tài: bài toán tháp Hà nội với giải thuật khử đệ quy bằng Stack

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    11

    Mặc định bài toán tháp Hà nội với giải thuật khử đệ quy bằng Stack

    Ai giúp mình bài toán tháp HÀ nội với. không giải bằng đệ quy mà dùng giải thuật stack để khử đệ quy làm bài toán Hà Nội. Nếu có nội dung hướng dẫn chi tiết thì mình cảm ơn nhều, mình đang rất cần.

  2. #2
    Ngày gia nhập
    04 2009
    Bài viết
    3

    Bài này dùng stack để khử đệ quy
    C Code:
    1. #include <iostream.h>
    2. #include <stdlib.h>
    3. #define max 100
    4. typedef struct{
    5.     int n;
    6.     char a;
    7.     char b;
    8.     char c;
    9. }nhom;
    10. typedef nhom elem;
    11. #include "stack.cpp"
    12. void main()
    13. {
    14.     stack s;
    15.     nhom bo;
    16.     char A;
    17.     char B;
    18.     char C;
    19.     int N;
    20.     int m;
    21.     cout<<"Nhap so: ";cin>>m;
    22.     createstack(s);
    23.     bo.n=m;bo.a='A';bo.b='B';bo.c='C' ;
    24.     push(s,bo);
    25.     do
    26.     {
    27.         pop(s,bo);
    28.         A=bo.a;B=bo.b;C=bo.c;
    29.         if(bo.n==1)
    30.             cout<<"\nChuyen "<<bo.a<<" qua "<<bo.c;
    31.         else
    32.         {
    33.             N=bo.n;
    34.             bo.n=N-1;bo.a=B;bo.b=A;bo.c=C;
    35.             push(s,bo);
    36.             bo.n=1;bo.a=A;bo.b=' ';bo.c=C;
    37.             push(s,bo);
    38.             bo.n=N-1;bo.a=A;bo.b=C;bo.c=B;
    39.             push(s,bo);
    40.         }
    41.     }while(!emptystack(s));
    42.    
    43. }
    bạn hãy xây dựng 1 stack

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    11

    cảm ơn bạn rất nhiều đã hổ trợ cho mình trong bài tập này nhưng cho mình hỏi tí nữa :d
    Mình mún làm theo đoạn code này thì như thế nào? các hàm khác giữ nguyên còn hàm move này code làm sao đây em đang bí quá mà thầy giao phải làm kỉu này
    C Code:
    1. #include<conio.h>
    2. #include<iostream.h>
    3. #define max 100
    4. struct stack{
    5.       char a[max];
    6.       char beg;
    7.       char end;
    8.                   char mid;
    9.       int top;
    10.       };
    11.  
    12. // tao ngan xep rong
    13. void creat_stack(stack &S)
    14.           {
    15.             S.top=0;
    16.           }
    17.  
    18. // kiem tra ngan xep rong
    19. int emty_stack(stack S)
    20.           {
    21.             if(S.top==0) return 1;
    22.               else return 0;
    23.           }  
    24.  
    25. /*// chen phan tu vao stack
    26.  
    27. void push(char beg,char mid,char end, stack &S)
    28.  {
    29.               if(S.top==max)
    30.              cout<<"ngan xep day";
    31.             else
    32.               {
    33.                 S.a[S.beg]=beg;
    34.                 S.a[S.mid]=mid;
    35.                 S.a[S.end]=end;
    36.                 S.a[S.top]++;
    37.                }
    38.  }
    39.  
    40. //loai phan tu ra khoi stack
    41. void pop(char &x,stack &S)
    42.  {
    43.      if(S.top==0)
    44.          cout<<"ngan xep rong";
    45.            else
    46.              {
    47.               x=S.a[S.top-1];
    48.               S.top-- ;
    49.  
    50.              }
    51.  
    52.  }
    53. // ham di chuyen thap ha noi
    54. void move(int n,stack &S)
    55.  {
    56.   char x;
    57.   int dem=0;
    58.   creat_stack(S);
    59.     if(emty_stack==0)
    60.          push('A','B','C',S);
    61.           while(emty_stack==0)
    62.            pop(x,S);
    63.            if(n==1)
    64.             {
    65.                 dem++;
    66.                 cout<<dem<<" "<<"di chuyen tu"<<" "<<S.a[S.beg]<<" "<<"den"<<" "<<S.a[S.end];
    67.             }
    68.            
    69.   //            else
    70.      
    71.  }
    72.  
    73. void main()
    74. {
    75. clrscr();
    76. int n;
    77. stack S;//char A,B,C;
    78. cout<<"chuong trinh stack";
    79. cout<<"\n nhap n="; cin>>n;
    80. move(n,S);
    81. getch();
    82. }

    Cảm ơn Long nhiều

  4. #4
    Ngày gia nhập
    04 2009
    Bài viết
    3

    Bài này của bạn tớ cũng có ý giống như bạn đó
    code stack
    C++ Code:
    1. typedef struct{
    2.     num e[max];
    3.     elem a[max];
    4.     elem b[max];
    5.     elem c[max];
    6.     int top;
    7. }stack;
    8. //-------------------
    9. void creatstack(stack &s)
    10. {   s.top=-1;}
    11. //-------------------
    12. int emptystack(stack s)
    13. {   return (s.top==-1);}
    14. //-------------------
    15. void push(stack &s, num &x, elem &a, elem &b, elem &c)
    16. {
    17.     if (s.top==max-1) exit(0);
    18.     memcpy(&s.e[++s.top],&x,sizeof(num));
    19.     memcpy(&s.a[s.top],&a,sizeof(elem));
    20.     memcpy(&s.b[s.top],&b,sizeof(elem));
    21.     memcpy(&s.c[s.top],&c,sizeof(elem));
    22. }
    23. //-------------------
    24. void pop(stack &s, num &x, elem &a, elem &b, elem &c)
    25. {
    26.     if (s.top==-1) exit(0);
    27.     memcpy(&x,&s.e[s.top],sizeof(num));
    28.     memcpy(&a,&s.a[s.top],sizeof(elem));
    29.     memcpy(&b,&s.b[s.top],sizeof(elem));
    30.     memcpy(&c,&s.c[s.top--],sizeof(elem));
    31. }

    còn đây là code khử đệ quy tháp Hà Nội
    C++ Code:
    1. #include <iostream.h>
    2. #include <stdlib.h>
    3. #include <cstring>
    4. #define max 100
    5. typedef int num;
    6. typedef char elem;
    7. #include "stack.cpp"
    8. void main()
    9. {
    10.     stack s;
    11.     int n,l,k=1;
    12.     char a='A';
    13.     char b='B';
    14.     char c='C';
    15.     cout<<"Nhap so: ";cin>>n;
    16.     creatstack(s);
    17.     push(s,n,a,b,c);
    18.     while(!emptystack(s))
    19.     {
    20.         pop(s,n,a,b,c);
    21.         if(n==1)
    22.             cout<<"\nChuyen "<<a<<" qua "<<c;
    23.         else
    24.         {
    25.             l=n-1;
    26.             push(s,l,b,a,c);
    27.             push(s,k,a,b,c);
    28.             push(s,l,a,c,b);
    29.         }
    30.     }
    31.  
    32.  
    33. }

  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    11

    Mặc định Thap Ha noi

    Bạn có thể chạy bài toán này giúp mình với
    Với thuật toán này khi nhận số đĩa lớn hơn 1 là toàn chạy 47 lần
    Cảm ơn bạn nhiều
    C Code:
    1. // ham di chuyen thap ha noi
    2. void move(int n,char A,char B,char C)
    3.  {
    4.    Info X=Gan(n,A,B,C);
    5.    stack S;
    6.    int dem=0;
    7.    creat_stack(S);
    8.    push(X,S);
    9.      while(emty_stack(S)==0)
    10.        {
    11.         pop(X,S);
    12.        
    13.         if(n==1)
    14.              {
    15.             dem++;
    16.             cout<<"\n"<<dem<<". Chuyen tu "<<X.beg<<" --->> "<<X.end;
    17.            }
    18.               else
    19.            {
    20.            
    21.             X.disk=n-1;X.beg=B;X.mid=A;X.end=C;
    22.             push(X,S);
    23.             X.disk=1;X.beg=A;X.mid=' ';X.end=C;
    24.             push(X,S);
    25.             X.disk=n-1;X.beg=A;X.mid=C;X.end=B;
    26.             push(X,S);
    27.            }
    28.        }
    29.  }
    Đã được chỉnh sửa lần cuối bởi honeyexe : 29-04-2009 lúc 12:31 AM. Lý do: code không xuất đúng

  6. #6
    Ngày gia nhập
    04 2009
    Bài viết
    4

    Mặc định bài toán tháp Hà nội với giải thuật khử đệ quy bằng Stack

    Bác nào vẽ được sơ đồ khối bài toán Tháp Hà Nội xin chỉ cho em với. Em vẽ mãi mà nó không ra cái gì cả. Vẽ giúp em với đi. Cái này tìm trên mạng cũng chẳng có.

  7. #7
    Ngày gia nhập
    09 2010
    Bài viết
    6

    bác nào rành về C++ giúp em bài này với.
    Bác chuyển dạng đệ qui này sang dạng lặp cho em với.
    Em làm mãi mà không ra được
    viết bằng c++ hay tubo c hay pascal đều được.
    cảm ơn các bác trước nhé

    C++ Code:
    1. #include<iostream>
    2. #include<math.h>
    3. using namespace std;
    4. long int Y(int n);
    5. long int X(int n)
    6. {
    7.  int i;
    8.  if (n==0) return 1;
    9.  else return X(n-1)+Y(n-1);
    10.  
    11. }
    12.  
    13. long int Y(int n)
    14. {
    15.   if (n==0) return 1;
    16.   else return 2*X(n-1)*Y(n-1);
    17.  
    18. }
    19.  
    20. int main ()
    21. {
    22.  int n;
    23.  cout<<"Thuat toan tinh de qui tuong ho ";cout<<endl;
    24.  cout<<"nhap n=";cin>>n;
    25.  cout<<"Gia tri cua ";
    26.  cout<<"X("<<n<<")="<<X(n);cout<<endl;
    27.  cout<<"gia tri cua ";
    28.  cout<<"Y("<<n<<")="<<Y(n); cout<<endl;  
    29. system("pause");
    30. }

  8. #8
    Ngày gia nhập
    02 2012
    Bài viết
    3

    thanks các bạn....................

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

  1. Cho Thuê Nhà Nguyên Căn đường nội bộ D3 thuộc D2 Q.Bình Thạnh DT: 4 x 20 giá 17triệu/tháng
    Gửi bởi nadareal trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 21-03-2014, 07:56 AM
  2. Cho Thuê Nhà Nguyên Căn đường nội bộ D3 thuộc D2 Q.Bình Thạnh DT: 4 x 20 giá 17triệu/tháng
    Gửi bởi nadareal trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 19-03-2013, 02:52 PM
  3. Cho Thuê Nhà Nguyên Căn đường nội bộ D3 thuộc D2 Q.Bình Thạnh DT: 4 x 20 giá 17triệu/tháng
    Gửi bởi nadareal trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 01-03-2013, 03:37 PM
  4. Cho Thuê Nhà Nguyên Căn đường nội bộ D3 thuộc D2 Q.Bình Thạnh DT: 4 x 20 giá 17triệu/tháng
    Gửi bởi nadareal trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-02-2013, 03:26 PM
  5. Thuật toán và giải thuật tạo serial của IDM [Hướng dẫn chi tiết]
    Gửi bởi luc13aka47 trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 4
    Bài viết cuối: 31-05-2012, 06:40 PM

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