1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Mọi người ơi giúp minh giải bài toán quy hoạch động nhé

Chủ đề trong 'Toán học' bởi olala1412, 06/01/2007.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. olala1412

    olala1412 Thành viên mới

    Tham gia ngày:
    03/07/2006
    Bài viết:
    272
    Đã được thích:
    0
    Mọi người ơi giúp minh giải bài toán quy hoạch động nhé

    đầu bài

    cho 1 đa giác n đỉnh. Ta cắt đa giác thành các tam giác con sao cho tổng các đường cắt là nhỏ nhất

    bài nay dùng quy hoạch động và viêt = C++, các bạn giúp mình nhé cảm ơn nhiều
  2. Dien_Quyhoach_2_0

    Dien_Quyhoach_2_0 Thành viên mới

    Tham gia ngày:
    20/03/2004
    Bài viết:
    329
    Đã được thích:
    0
    Bạn phải cho ví dụ, đầu vào những dữ liệu nào, đầu ra những dữ liệu nào và vài cái Test nữa đi!
    Gợi ý về quy hoạch động:
    đa giác n đỉnh = đa giác n-1 đỉnh + đường vừa cắt
    đa giác n-1 đỉnh = đa giác n-2 đỉnh + đường vừa cắt
    cứ thế mà tiến hành thôi
  3. olala1412

    olala1412 Thành viên mới

    Tham gia ngày:
    03/07/2006
    Bài viết:
    272
    Đã được thích:
    0
    hic ban co thi up cho minh phat noi vay thi vo bien lam
  4. Dien_Quyhoach_2_0

    Dien_Quyhoach_2_0 Thành viên mới

    Tham gia ngày:
    20/03/2004
    Bài viết:
    329
    Đã được thích:
    0
    thôi được, mình sẽ viết một bài nhập dữ liệu từ bàn phím và in ra màn hình nhé, bạn chịu khó chờ một chút.
  5. olala1412

    olala1412 Thành viên mới

    Tham gia ngày:
    03/07/2006
    Bài viết:
    272
    Đã được thích:
    0
    bạn ơi viết xong chưa ? bạn viết xong thì up lên cho mình với nhé,cam ơn nhiều
  6. Dien_Quyhoach_2_0

    Dien_Quyhoach_2_0 Thành viên mới

    Tham gia ngày:
    20/03/2004
    Bài viết:
    329
    Đã được thích:
    0
    #include <iostream>
    #include <math.h>
    using namespace std;
    int n,x[100],y[100],b[100],before[100],after[100];
    int nn=0;
    float length=0;
    float distance(int x1,int y1,int x2,int y2){
    return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
    }
    void Try(int i,int b[100])
    {
    nn++;
    int bef=before;
    int aft=after;
    float len=sqrt(distance(x[before],y[before],x[after],y[after]));
    b=0;
    length=length+len;
    if (nn==n-3)
    {
    cout << length << "
    ";
    }
    before=before[i-1];
    after=after[i+1];
    for (int j=1;j<=n;j++)
    {
    if ((b[j]==1)&(nn<n-3))
    {
    Try(j,b);
    }
    }
    b=1;
    length=length-len;
    before=bef;
    after=aft;
    nn--;
    }
    int main ()
    {
    cout << "Input number of side: ";
    cin >> n;
    for (int i=1;i<=n;i++){
    cout << "x[" << i << "]= ";
    cin >> x;
    cout << "y[" << i << "]= ";
    cin >> y;
    b=1;
    before=i-1;
    after=i+1;
    }
    x[0]=x[n];
    y[0]=x[n];
    x[n+1]=x[1];
    y[n+1]=y[1];
    for (i=1;i<=n;i++){
    Try(i,b);
    cout << "
    ";
    }
    return 0;
    }
    Moi kiem tra voi n>4
    n=4 can phai sua
  7. Dien_Quyhoach_2_0

    Dien_Quyhoach_2_0 Thành viên mới

    Tham gia ngày:
    20/03/2004
    Bài viết:
    329
    Đã được thích:
    0
    [​IMG]
    sua lai y[0]=y[n] chu ko phai =x[n]
  8. Dien_Quyhoach_2_0

    Dien_Quyhoach_2_0 Thành viên mới

    Tham gia ngày:
    20/03/2004
    Bài viết:
    329
    Đã được thích:
    0
    Bloodshed Dev-C++
    tiện hỏi luôn có bạn nào dùng phần mềm trên thì chỉ cho mình cách chỉnh để khi chạy xong cửa sổ DOS thì nó hiện lên chữ Press any key to continue.
  9. long40d

    long40d Thành viên rất tích cực

    Tham gia ngày:
    14/06/2002
    Bài viết:
    1.028
    Đã được thích:
    0
    Chịu
    thêm dòng
    char c;
    cin >> c
    là ôkê

Chia sẻ trang này