Information Technology VietNam

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

3 posters

    thuật toán fordbellman

    minhdao
    minhdao
    Newbie
    Newbie


    Giới tính : Nam Bài gửi : 2
    Tổng Điểm : 10
    Điểm Thưởng : 0
    Sinh Nhật : 26/02/1990 Bị Dụ Dỗ : 31/10/2009
    Tuổi : 34

    thuật toán fordbellman Empty thuật toán fordbellman

    Bài gửi by minhdao 4/12/2009, 21:55

    các bác ơi ! sao em code nó chạy rồi mà nó xuất ra vẫn sai các bác xem hộ em nha
    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #define max 50
    #define trongsomax 1000
    int n,s,t;
    int truoc[max],d[max],a[max][max];
    void nhapsolieu()
    {
        int i,j;
        FILE*f;
        f=fopen("fordbell.txt","rt");
        fscanf (f,"%d%d%d",&n,&s,&t);
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            fscanf(f,"%d",&a[i][j]);
            if(a[i][j]==0)
                a[i][j]=trongsomax;
        }
        fclose(f);
    }
    void insolieu()
    {
        cout<<"Dinh nguon la:"<<s<<endl;
        cout<<"Dinh dich la:"<<t<<endl;
        for(int i=1;i<=n;i++)
        {
            for (int j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
            cout<<endl;
        }
    }
    void inketqua()
    {
        cout<<"Duong di ngan nhat tu"<<s<<"den"<<t<<":";
        cout<<t<<"<=";
        int i=truoc[t];
        while (i!=s)
        {
            cout<<i<<"<=";
            i=truoc[i];
        }
        cout<<s<<endl;
        cout<<"Do dai duong di ngan nhat la :"<<d[t]<<endl;
        cout<<"Khoang cach tu dinh "<<s<<"den cac dinh khac la:";
        for(i=1;i<=n;i++)
        cout<<d[i]<<" ";
        getch();
    }
    void ford_bellman()
    {
        for(int v=1;v<=n;v++)
        {
            truoc[v]=s;
            d[v]=a[s][v];
        }
        d[s]=0;
        for(int k=1;k<=n-2;k++)
        for(int v=1;v<=n;v++)
        for(int u=1;u<=n;u++)
        if(d[v]>d[u]+a[u][v]&&v!=s)
        {
            d[v]=d[u]+a[u][v];
            truoc[v]=u;
        }
    }
    void main()
    {
        nhapsolieu();
        insolieu();
        ford_bellman();
        inketqua();
    }



    fordbell.inp
    515
    01003
    00338
    0001-5
    00200
    00040


    Được sửa bởi Vy Thanh Định ngày 4/12/2009, 22:05; sửa lần 1. (Reason for editing : Đưa bài viết vô thẻ code)
    DarkEternal
    DarkEternal
    New Member
    New Member


    Giới tính : Nam Bài gửi : 7
    Tổng Điểm : 15
    Điểm Thưởng : 4
    Sinh Nhật : 11/08/1990 Bị Dụ Dỗ : 01/12/2009
    Tuổi : 34

    thuật toán fordbellman Empty Re: thuật toán fordbellman

    Bài gửi by DarkEternal 5/12/2009, 08:38

    Một lời khuyên cho bạn khi đã viết những bài thế này là nên dùng mã giả của thầy đưa rồi chuyển nó qua code của mình thì dễ kiểm tra lỗi hơn.Ở đây là bài của thầy làm nên mình nghĩ việc lỗi sai đở đây có lẽ ko có,bạn thử kiểm tra Debug lại từng bước xem.
    ltv2009
    ltv2009
    Top Poster
    Top Poster


    Giới tính : Nữ Bài gửi : 198
    Tổng Điểm : 450
    Điểm Thưởng : 5
    Sinh Nhật : 17/10/1990 Bị Dụ Dỗ : 10/10/2009
    Tuổi : 34

    thuật toán fordbellman Empty Re: thuật toán fordbellman

    Bài gửi by ltv2009 5/12/2009, 12:26

    Trong này bạn cho chạy vòng for theo v trong , rùi mới tới theo u bên ngoài, mình thấy code này đâu có sai ?

    Sponsored content


    thuật toán fordbellman Empty Re: thuật toán fordbellman

    Bài gửi by Sponsored content


      Hôm nay: 2/11/2024, 18:21