Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Duyệt đồ thị theo chiều sâu dùng stack (help me!!!)

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

    Red face Duyệt đồ thị theo chiều sâu dùng stack (help me!!!)

    Mình vừa code duyệt đồ thị theo chiều sâu dùng stack. Cô bắt dựa theo thuật toán này :
    PHP Code:
    void Dtraverse (int k
    {
        
    int h;
        
    Stack<intS(50);
        
    S.Push(k); 
        
    chuaxet[k]=0;
        while(!
    S.Empty())
        {
            
    h=S.Pop();
            
    cout<<h<< "  ";
            for(
    i=n;i>=1;i--)
            if(
    chuaxet[i] && A[h][i]) 
            {
                
    S.Push(i);
                
    chuaxet[i]=0;
            }
        }
        return;
        

    Đây là code mình làm, nó chạy được trên CFree nhưng chả ra kết quả duyệt đồ thị gì cả. MÌnh chạy trên Turbo C thì nó báo 17 lỗi, trong đó có 1 kỗi là không đọc được file stack.h
    Các bạn xem rồi giúp mình với, chả biết sai chỗ nào nữa.
    PHP Code:
    #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <assert.h>
    template <class Item>
    class 
    Stack 
    {
        public :
        
    Stack(int m=1);
        
    // Khoi tao ngan xep rong~ voi' dung luong m
        
    Stack(const Stack &S);
        
    // Ham` kien' tao copy
        
    ~Stack() // Ham` huy? stack 
        
    delete []element;}
        
    Stack &operator=(const Stack &S);
        
    // Toan' tu? gan' 
        
    bool Empty() const;
        
    void Push(const Item &x);
        
    Item &Pop();
        private:
        
    Item *element;
        
    int size;
        
    int top;
    };

    //---------------------------------------------------------------------------------

    template <class Item
    Stack<Item> ::Stack(int m)   // Ham kien' tao Stack
    {
        
    element = new Item[m]; // Toan tu new dung` de khai bao 1 doi' tuong Item
        
    size=m;
        
    top=-1;
    }

    template <class Item>
    Stack<Item> :: Stack(const Stack<Item> &S)  // Ham kien' tao copy
    {
        
    element = new Item[S.size];
        
    size S.size;
        
    topS.top;
        for(
    int i=0;i<=top;i++)
        
    element[i]=S.element[i];
    }

    template <class Item// Toan' tu gan' 
    Stack<Item> &Stack<Item> :: operator = (const Stack<Item> &S)
    {
        if(
    size != S.size)
        {
            
    delete []element;
            
    element= new Item[S.size];
            
    sizeS.size;
        }
        
    top=S.top;
        for(
    int i=0;i<=top;i++)
        
    element[i]=S.element[i];
        return *
    this;
    }
    // Cai` dat cac ham` thanh` phan` cua lop' Stack 
    template <class Item>
    bool Stack<Item> :: Empty() const //Kiem tra Stack co rong~ khong 
    {
        return 
    top<0;
    }
    template <class Item>
    void Stack<Item> ::Push(const Item &x)  //Day? 1 phan tu vao dinh Stack 
    {
        if(
    top==size-1// Mang day` 
        
    {
            
    Item *= new Item[2*size];
            
    assert(A!=NULL);
            for(
    int i=0;i<=top;i++)
            
    A[i]=element[i];
            
    size=2*size;
            
    delete []element;
            
    element=A;
        };
        
    element[++top]=x;
    }

    template <class Item>
    Item &Stack<Item> :: Pop() // Loai phan tu o dinh? cua ngan xep
    {
        
    assert(top>=0);
        return 
    element[top--];
    }

    //-----------------------------------------------------------------------------
    int a[50][50],n,i,j,chuaxet[50];

    void Dtraverse (int k
    {
        
    int h;
        
    Stack<intS(50);
        
    S.Push(k); 
        
    chuaxet[k]=false;
        while(!
    S.Empty())
        {
            
    h=S.Pop();
            
    cout<<h<< "  ";
            for(
    i=n;i>=1;i--)
            if(
    chuaxet[i] && a[h][i]) 
            {
                
    S.Push(i);
                
    chuaxet[i]=0;
            }
        }
        return;
        
    }

    void nhap (int a[50][50])
    {
        
    int i,j;
        
    cout<<"Nhap so dinh cua do thi n = "cin>>n;
        for (
    i=1;i<=n;i++)
        {
            for (
    j=i+1;j<=n;j++)
            {
                
    cout<<"a["<<i<<","<<j<<"]="cin>>a[i][j];
                
    a[j][i]=a[i][j];
            }
                
    a[i][i]=0;
        }
    }

    void indothi (int a[50][50])
    {
        
    int i,j;
        
    cout<<"Do thi da nhap : "<<endl;
        for (
    i=1;i<=n;i++)
        {
            for (
    j=1;j<=n;j++)
            
    cout<<"   " <<a[i][j];
            
    cout<<endl;
        }
    }

    void timkiem (int a[50][50])
    {
        
    int i,u;
        
    nhap (a);
        
    indothi (a);
        while (
    1)
        {
            for (
    i=1;i<=n;i++)
            
    chuaxet[i]=0;
            
    cout<<"Ban muon duyet tu dinh nao (bam -1 thoat) : "cin>>u;
            if (
    u==-1) break;
            if (
    u>|| u<0)
            {
                
    cout<<"Dinh nay khong thuoc do thi !";
                break;
            }
            
    Dtraverse(u);
        }
    }
    //-----------------------------------------
    void main ()
    {
        
    int a[50][50];
        
    timkiem (a);

    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi rong3sao : 02-02-2010 lúc 10:06 PM.

  2. #2
    Ngày gia nhập
    10 2008
    Bài viết
    171

    Cái chính là thuật toán. Nếu biết thuật toán thì ngôn ngữ chỉ là chuyện đơn giản thôi
    Bạn có thể tham khảo thêm trong các giáo trình .
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    chicken

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

  1. Thuật toán C++ Tìm kiếm đồ thị theo chiều sâu (Sử dụng Stack)- Không xuất được kết quả
    Gửi bởi nhatminh266 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 13-03-2012, 01:13 AM
  2. Lập trình C++ Duyệt đồ thị theo chiều sâu dùng stacktrong C++?
    Gửi bởi rong3sao 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: 19-03-2011, 09:03 AM
  3. Duyệt theo chiều rộng trên cây nhị phân
    Gửi bởi dokyan1989 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: 28-02-2009, 05:50 PM
  4. Hỏi code mô tả việc duyệt cây theo chiều rộng và theo chiều sâu
    Gửi bởi vitco trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 27-03-2008, 02:47 PM
  5. Duyệt đồ thị theo chiều sâu,sử dụng danh sách kề để mô tả đồ thị
    Gửi bởi shogun_vn 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: 11-02-2008, 08:03 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