Trang chủĐăng kýĐăng nhập Cộng đồng tin học
Thứ 2, 2024-05-06, 8:20 PM
Khung đăng nhập

Khung tán gẫu
Xóm 'bà Tám'

http://congdongtinhoc.net
CHUYÊN TRANG GAME ONLINE GIẢI TRÍ//lehung-system.ucoz.net/stuff/

Thống kê diễn đàn
Bài viết mới nhất Trang chủ cập nhật Top 10 thành viên tích cực 10 Thành viên mới nhất
  • Quạt Hướng Trục
  • vào ucoz.com thiết kế web không hiểu sao...
  • Sothink DHTMLMenu 9.2 Build 90326
  • cho em quảng cáo cái
  • BIDV triển khai gói 10.000 tỷ đồng cho v...
  • Phượng Đã Nở Ngoài Hiên
  • Ngựa Ô Thương Nhớ
  • Những mẩu chuyện vui
  • 1001 cách biến "sim rác" thành...
  • Windows XP Media Center Edition 2008 - S...
  • Hướng dẫn chỉnh sửa dữ liệu trong form m...
  • 15 điều người dùng máy tính nên biết
  • Choáng vì "sâu" mới phát tán qua email
  • Giấu bớt những thành phần Control Panel ...
  • Thảo luận về IFrame Injection Attacks
  • Miễn phí bản quyền Ashampoo Anti-Malware...
  • Trải nghiệm với Camtasia Studio 7
  • 10 kỹ năng IT ‘hot’ của năm 2011
  • Intel công bố bộ vi xử lý Hệ thống trên ...
  • Kho phần mềm dành cho Android
  • Hung@info
  • thangbom
  • Hung@webmater
  • hebeo
  • giodaingan
  • david15
  • whitecat
  • luutruthongtin
  • systemfan_12
  • sha66b5cates0428
  • amir2x4
  • taiwindows075
  • kholuutru
  • shahmeerolivedigital9
  • ysg06363100
  • hetoxe6474
  • rootanalysisusa
  • memory_gift
  • systemfan_12
  • quatcongnghiep_saigon


  • [ Tổng hợp bài mới · Tổng số thành viên · Nội qui chung · Tìm kiếm bài viết · RSS ]
    • Page 1 of 1
    • 1
    Diễn đàn » Lập Trình » C/C++/C# » Bài toán Mã đi tuần bằng C
    Bài toán Mã đi tuần bằng C
    david15Date: Thứ 2, 2009-05-11, 12:48 PM | Bài viết # 1
    Tân binh
    Nhóm: Thành viên tích cực
    Bài viết: 11
    Uy tín: 0
    Hiện tại: Offline
    Mình mới học về lập trình, và đang làm bài toán Mã đi tuần bằng C .
    Mình định sử dụng giải thuật đệ quy và quét cạn để làm bài nhưng vẫn chưa hiểu về nó lắm và không biết cách hiển thị bàn cờ. Các bạn có thể hướng dẫn giúp mình được không vậy?
    Cám ơn rất nhiều!!!
     
    Hung@infoDate: Thứ 2, 2009-05-11, 2:00 PM | Bài viết # 2
    Trung úy
    Nhóm: Quản trị viên
    Bài viết: 994
    Uy tín: 10
    Hiện tại: Offline
    Vét cạn hay thử sai về thực chất thì cũng là một dạng giải bằng cách xét tất cả các khả năng, bỏ đi những khả năng không thực hiện được, ghi nhận những khả năng được xem là đáp án.

    bài toán mã đi tuần bằng phương pháp đệ quy:

    Code
    #include <stdio.h>
    #include <stdlib.h>
    void Show(int board[12][12]);
    void Init(int board[12][12])
    {

       for(int i=0;i<12;i++)
       for(int j=0;j<12;j++)
       if(i>=2 && i<=9 && j>=2 && j<=9)
       board[i][j]=0;
       else
       board[i][j]=-1;
    }
    void Try(int step,int i,int j,int board[12][12],int *I,int *J)
    {
         
       for(int l=0;l<7;l++)//duyet cac truong hop theo kim dong ho
       {
       if(board[i+I[l]][j+J[l]]==0)
       //o chua qua , dat duoc
       {
       if(step+1==63)//hoan tat
       {
       for(i=2;i<10;i++)
       for(j=2;j<10;j++)
       if(board[i][j]==0)
       board[i][j]=63;
       Show(board);
       exit(0);
       }
       else
       {
       i=i+I[l];
       j=j+J[l];
       board[i][j]=step+1;
       Try(step+1,i,j,board,I,J);
       board[i][j]=0;
       }
       }  
       }
    }
    void Show(int board[12][12])
    {
       for(int i=0;i<12;i++)
       {
       for(int j=0;j<12;j++)
       printf("%4d",board[i][j]);
       printf("\n\n");
       }
    }
    void main()
    {

    int board[12][12];
    int I[8]={-2,-1,1,2,2,1,-1,-2};
    int J[8]={1,2,2,1,-1,-2,-2,-1};
    Init(board);
    board[6][3]=1;
    Show(board);
    Try(1,6,3,board,I,J);
    }

    }

    Bạn có thể dùng thuật toán cắt gien áp dụng cho bài này bạn tham khảo:

    Code
    #include <iostream.h>
    #include <iomanip.h>

    int h[8][2] = {-2, 1, -1, 2, 1, 2, 2, 1, 2, -1, 1, -2, -1, -2, -2, -1};
    int daqua[100][100];
    int x, y, m, n, sc;

    int ok(int u, int k)
    {
    if (u >= 1 && u <= k) return 1;
    else return 0;
    }
    void nhapdl()
    {
    cout << "Nhập số hàng M của bạn có : ";
    cin >> m;
    cout << "Nhập số cột N của bạn có : ";
    cin >> n;
    do
    {
    cout << "Nhap toa do hang ban dau X cua con ma (1<=X<=M) : ";
    cin >> x;
    }
    while (!ok(x, m));
    do
    {
    cout << "Nhap toa do cot ban dau Y cua con ma (1<=Y<=N) : ";
    cin >> y;
    }
    while (!ok(y, n));
    }

    void khoitao()
    {
    sc = 0;
    daqua[x][y] = 1;
    }

    void xuat(int c)
    {
    cout << "-----------------------------------------------" << endl;
    cout << "Cach thu " << c << " de con ma di het ban co : " << endl;
    for (int i = 1; i <= m; i++)
    {
    for (int j = 1; j <= n; j++)
    cout << setw(5) << daqua[i][j];
    cout << endl;
    }
    }

    void mxt(int u, int v, int c)
    {
    int uu, vv;
    if (c == m * n)
    {
    sc++;
    xuat(sc);
    }
    else
    {
    for (int i = 0; i <= 7; i++)
    {
    uu = u + h[i][0];
    vv = v + h[i][1];
    if (ok(uu, m) && ok(vv, n))
    if (!daqua[uu][vv])
    {
    daqua[uu][vv] = c + 1;
    mxt(uu, vv, c + 1);
    daqua[uu][vv] = 0;
    }
    }
    }
    }

    int main()
    {
    nhapdl();
    khoitao();
    mxt(x, y, 1);
    cout << "------------------------------------------------------------------";
    cout << "Vay, co' tong cong " << sc << " cach de con ma di het ban co!(^_^)";
    return 0;
    }


    --== Cộng đồng tin học ==--
     
    Diễn đàn » Lập Trình » C/C++/C# » Bài toán Mã đi tuần bằng C
    • Page 1 of 1
    • 1
    Search:


      Copyright Cộng đồng tin học © 2024