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 10 trên tổng số 10 kết quả

Đề tài: "Nai" đi tuần (Knight's tour) trong lập trình C++

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    48

    Arrow "Nai" đi tuần (Knight's tour) trong lập trình C++

    Em đang học đến bài Knight’s tour và gặp khó khăn trong việc tìm thuật giải. Ngồi chơi trò này hoài mà không lắp đầy được 64 ô.
    http://www.borderschess.org/KnightTour.htm

    1) Em đã nghĩ ra cách là: Gán tất cả các phần tử trong mảng K[8][8] bằng 0 rồi dùng vòng lặp gán từng “số lần đi” vào các phần tử nhưng vẫn còn nhiều ô số 0.
    2) Em đã tham khảo bài của anh Rook nhưng anh Rook viết đệ qui khó hiểu quá, trong kho “cấu trúc dữ liệu và giải thuật” cũng có, nhưng lại viết bằng C (gotoxy) khó hiểu luôn +_+ .
    3) Bây giờ em muốn làm bài này theo “iterative approach” ^ ^.
    4) Em đã liệt kê tất cả các “vị trí đứng” đầu tiên của con “nai” bằng 2 vòng lặp ngoài với m và n nhưng không thành công T.T .
    5) Không biết làm sao ra được mấy chục ngàn trường hợp như anh Rook? Nếu có thể thì nói cho em biết chỗ sai và gợi ý hướng đi đúng rõ ràng 1 chút. Thanks ^ ^ .

    C++ Code:
    1. #include <iostream>
    2. #include <iomanip>
    3. #include <conio.h>
    4. using namespace std;
    5.  
    6. void initialization();
    7. int isRight(const int cRow, const int cCol);
    8. void Knight();
    9. void print();
    10. int doesZeroExist();
    11.  
    12. const int board = 8;
    13. int K[board][board];
    14.  
    15. int horizontal[] = {2, 1, -1, -2, -2, -1, 1, 2};
    16. int   vertical[] = {-1, -2, -2, -1, 1, 2, 2, 1};
    17. void main()
    18. {
    19.     initialization();
    20.     Knight();  
    21. }
    22.  
    23. int isRight(const int cRow, const int cCol)
    24. {
    25.     if(cRow < 0 || cRow > 7 || cCol < 0 || cCol > 7 || K[cRow][cCol] != 0)
    26.         return 0;
    27.     return 1;
    28. }
    29.  
    30. void Knight()
    31. {  
    32.     int cRow, cCol; // currentRow va` currentColumn // 
    33.     int times;
    34.  
    35.     for(int m = 0; m < 8; m++)        // 2 loops na`y du`ng de? di //
    36.         for(int n = 0; n < 8; n++)    // chuye?n so^' "1" qua 64 vi tri' //
    37.         {
    38.             K[m][n] = 1;
    39.             cRow = m; cCol = n;
    40.             times = 2;         
    41.             for(int i = 0; i < 64; i++) // 63 moves //
    42.                 for(int j = 0; j < 8; j++) // 8 huo'ng di chuye?n //
    43.                 {
    44.                     cRow += vertical[j];
    45.                     cCol += horizontal[j];
    46.                     if(isRight(cRow, cCol))
    47.                     {              
    48.                         K[cRow][cCol] = times;
    49.                         times++;
    50.                     }
    51.                     else
    52.                     {
    53.                         cRow -= vertical[j];
    54.                         cCol -= horizontal[j];
    55.                     }
    56.                 }
    57.             if(doesZeroExist())
    58.                 print();
    59.             cout << endl << endl;
    60.             getch(); // bat chuo'c anh Rock, ko bi't de? la`m gi` ngoa`i viec stop ^ ^ //
    61.             initialization();
    62.         }
    63. }
    64.  
    65. void initialization()
    66. {
    67.     for(int i = 0; i < board; i++)
    68.         for(int j = 0; j < board; j++)
    69.             K[i][j] = 0;
    70. }
    71.  
    72. void print()
    73. {
    74.     for(int i = 0; i < board; i++)
    75.     {
    76.         for(int j = 0; j < board; j++)
    77.         {
    78.             cout << setw(3) << K[i][j];
    79.         }
    80.         cout << endl;
    81.         cout << endl;
    82.     }
    83. }
    84.  
    85. int doesZeroExist()
    86. {
    87.     for(int i = 0; i < 8; i++)
    88.         for(int j = 0; j < 8; j++)
    89.             if(K[i][j] == 0)
    90.                 return 1;
    91.     return 0;
    92. }

    Hỏi nhiều ngại quá. Sợ hỏi rời rạc thì anh Dream ko cho ^ ^ .
    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ý.

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Haha, anh nghe con Nai mà anh hú hồn, con Mã cậu à T_T. Bài đó advance rùi đọc chưa hiểu đâu, đây bài này anh làm backtrack cùi bắp đây, bài kia không phải đệ qui, 1 giải thuật khác ( chưa cần tìm hiểu vội ). Bài này anh viết năm ngoái, 1 năm rùi, code không hề có gì phức tạp, đặt tên biến cũng còn rất gà T_T. Em đọc thử xem sao, và nhớ kĩ là đọc xong thì viết lại, nếu vẫn chưa được viết lại tiếp, phải hiểu và viết lại được, học thuộc lòng cũng được, cứ ham học thì ắt sẽ có kết quả
    Một lưu ý là bài em tư tưởng really close T_T, good effort ^_^. Có tiến bộ rất nhanh ! Nhưng bài này làm trực tiếp thì hơi cực, vì phá đệ qui là kĩ thuật tương đối khó. Nên cứ thử làm đệ qui trước đã. Anh cũng chưa đọc kĩ lời giải của em, vì bây h trể quá rùi, có gì mai anh sẽ coi lại cho.
    PHP Code:
    #include<iostream>



    /* Knight Tour */


      
    const int size 8;
      
    void initialization();
      
    void print();
      
    void Knight int timesint rowint col );

      
    bool K[size][size];
      
    bool checkint rowint col);
      
    int move_col[] = {-2, -1, +1, +2, +2, +1, -1, -2};
      
    int move_row[] = {+1, +2, +2, +1, -1, -2, -2, -1};

      
    int rowcolindexnext_rownext_col
      
    int times;

    void initialization()
    {
        
    index =0;
        
    times 0;
        
    row 0;
        
    col 0;
       
        for ( 
    int i=0sizei++)
        {
            for ( 
    int j=0sizej++)
            {
                
    K[i][j] = false;
            }
        }

      
    K[row][col] = true;
    }


    bool check int rowint col )
    {
        if ( 
    row || row || col || col || K[row][col] == true )
            return 
    false;
        else
            return 
    true;
    }

    void print ()
    {
        
    index++;
        
    cout << " Let's go Knight ^^" << endl;
        
    cout << " The : "<< index << "th"<< endl;
        for ( 
    int k 0sizek++ )
        {
            for ( 
    int m 0sizem++ )
            {
                  if ( 
    K[k][m] == true )
                  {    
                    
    cout << " K " ;
                   
                  }    
                  else 
                    
    cout << " * ";
            }
        
    cout << endl;
        }
    }
    void Knight int timesint rowint col)
    {
          
    K[row][col] = true;  
          if ( 
    times >= 63 )
          {
            print();
            
    cin.get();    
          }    
          else
          {
                  for ( 
    int i 08i++ )  
                  {
                  
                      
    next_col col move_col[i];
                      
    next_row row move_row[i];
                      
                      if (
    checknext_row,next_col ))
                      { 
                         
                        
    Knight (times+1next_rownext_col);
                        
    K[next_row][next_col] = false;     
                      }
                  }
          }
                
    }  

    int main(){
      
    initialization();
      
    Knight (0,0,0);
      return 
    0;

    Đã được chỉnh sửa lần cuối bởi rox_rook : 19-02-2008 lúc 06:13 PM.

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    48

    Hic, mặc dù em đã sửa lại vài chỗ trong code của anh Rook nhưng vẫn không hiểu gì hết. Chương trình không xuất ra số mà xuất ra chữ “K” với dấu “*” lỗ chỗ, em chẳng biết nước đi của nó thế nào.
    Bài này vẫn gọi lại hàm Knight trong Knight mà, có cách nào dùng loop ấy, cái đệ quy này khó quá >.< .


    PHP Code:
    #include<iostream>
    using namespace std;

    /* Knight Tour */

      
    const int size 8;
      
    void initialization();
      
    void print();
      
    void Knight int timesint rowint col );

      
    bool K[size][size];
      
    bool checkint rowint col);
      
    int move_col[] = {-2, -1, +1, +2, +2, +1, -1, -2};
      
    int move_row[] = {+1, +2, +2, +1, -1, -2, -2, -1};

      
    int rowcolindexnext_rownext_col
      
    int times;

    void initialization()
    {
        
    index =0;
        
    times 0;
        
    row 0;
        
    col 0;
       
        for ( 
    int i=0sizei++)
        {
            for ( 
    int j=0sizej++)
            {
                
    K[i][j] = 0;
            }
        }

      
    K[row][col] = 1;
    }


    bool check int rowint col )
    {
        if ( 
    row || row || col || col || K[row][col] == )
            return 
    0;
        else
            return 
    1;
    }

    void print ()
    {
        
    index++;
        
    cout << " Let's go Knight ^^" << endl;
        
    cout << " The : "<< index << "th"<< endl;
        for ( 
    int k 0sizek++ )
        {
            for ( 
    int m 0sizem++ )
            {
                  if ( 
    K[k][m] == )
                  {    
                    
    cout << " K " ;
                   
                  }    
                  else 
                    
    cout << " * ";
            }
        
    cout << endl << endl;
        }
    }
    void Knight int timesint rowint col)
    {
          
    K[row][col] = 1;  
          if ( 
    times >= 63 )
          {
            print();
            
    cin.get();    
          }    
          else
          {
                  for ( 
    int i 08i++ )  
                  {
                  
                      
    next_col col move_col[i];
                      
    next_row row move_row[i];
                      
                      if (
    checknext_row,next_col ))
                      { 
                         
                        
    Knight (times+1next_rownext_col);
                        
    // K[next_row][next_col] = 0; //
                      
    }
                      
    K[next_row][next_col] = 0// do`ng na`y em chuye?n tu` tre^n kia xuo'ng //
                  
    }
                  
          }
                
    }  

    int main(){
      
    initialization();
      
    Knight (0,0,0);
      return 
    0;

    Đã được chỉnh sửa lần cuối bởi Emerald214 : 19-02-2008 lúc 09:45 PM.

  4. #4
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Xin lỗi vì tớ nói chuyện ngoài lề một tí.

    Haha, anh nghe con Nai mà anh hú hồn, con Mã cậu à T_T
    "Nai" mà Emerald nói là Knight (mã) chứ ko phải con nai đâu. .

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bài này vẫn gọi lại hàm Knight trong Knight mà, có cách nào dùng loop ấy, cái đệ quy này khó quá >.< .
    Theo anh thử sai là phương pháp dễ hiểu nhất, vì em xem đi, em đặt 1 con vào không được thì em sao em thử nó cho vị trí khác, cái đệ qui chính là động tác lấy ra, chuyển chỗ, và đặt vào lại thôi. Nếu dùng vòng lặp thì dùng giải thuật heuristic.
    Với ý tưởng là ta đặt vào ô có ít xác xuất tạo ra bước đi mới nhất, nghĩa là
    ví dụ em đứng ở ô [0][0], với bước đi con mã thì em chỉ có thể move sang được 2 ô khác --> 2 possibility.
    Nhưng đối với ô là [4][4] thì em xem nó cả 7 bước move, vậy xét từ ô góc, ta đặt theo quy luật trên thì có luôn có 1 đường đi mà chỉ đi qua ô đó 1 lần, và đó là cái bài giải anh mới vừa post trong bài Knight ở box giải thuật.
    Cái đoạn đệ qui thực ra nó dễ lắm nếu em chịu khó ghi ra và kiên nhẫn 1 chút.
    Đa số những người mới học, họ hay gặp rắc rối khi đọc code đệ qui thứ 1 là vì họ chưa biết cách xử lý :
    - Ví dụ em đang nhớ trong đầu 1 bước move nào đó, đệ qui gọi tiếp, em nhớ bước thứ 2, đệ qui gọi tiếp em nhớ nước thứ 3. gọi tiếp thứ 4, tới chừng thứ 10 là hết nhớ nỗi. Giải đệ qui và hiểu nó không khó nhưng phải dùng đúng phuơng pháp, ghi ra giấy nếu nhớ không nổi. Anh thì thường làm giải thuật nào anh cũng vẽ mã giả + hình minh họa, vì anh ghét nhất kiểu nhớ đó, nếu nhớ chính xác thì ok, trong quá trình hình dung nếu có mistake thì debug bằng cực hình, vì sai giải thuật thì chỉ có nước làm lại từ đầu. Cho nên ghi ra là 1 cách tốt để hiểu các giải thuật phức tạp.
    Mai mốt em học tới đồ thị thì em sẽ thấy việc vẽ mô hình là quan trọng đến chừng nào.
    Bài đệ qui nó chỉ vọn vẹn có vài dòng :
    PHP Code:
    K[row][col] = 1;  
          if ( 
    times >= 63 )
          {
            print();
            
    cin.get();    
          } 
    Nếu đã đủ số hết 64 lần đi in ra kết quả ( có thể đúng hoặc sai, không bảo đảm sẽ cho kết quả đúng vì thử sai mà ).
    Đoạn này thì anh giải thích cũng được, nhưng em hãy cố chiến đấu với nó 1 vài ngày để hiểu nó trước thì tốt hơn, nến thực sự em muốn học có hiệu quả :
    PHP Code:
     {
                  for ( 
    int i 08i++ )  
                  {
                  
                      
    next_col col move_col[i];
                      
    next_row row move_row[i];
                      
                      if (
    checknext_row,next_col ))
                      { 
                         
                        
    Knight (times+1next_rownext_col);
                        
    K[next_row][next_col] = false;     
                      }
                  }
          } 
    Tại sao có dòng này : K[next_row][next_col] = false; , hãy thử đặt vấn đề khi không có dòng này thì sao ?
    Làm 1 bài mà chắc thì hơn cả làm 1 chục bài, try harder.

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định "Nai" đi tuần (Knight's tour) trong lập trình C++

    Tớ nghĩ là cậu nên làm trên giấy trước đi. Bài này thấy cũng khá dễ, cái quan trọng là nắm được những điểm nhấn của nó ( quay lui ). Khi cậu đã hiểu rõ rồi thì tự code cũng xong thôi. Chưa cần phải tham vấn code của R2 vội.

  7. #7
    Ngày gia nhập
    12 2007
    Bài viết
    48

    1) Cái code này của anh, em copy vào không chạy. Nó chỉ hiện màn hình đen và chữ “Press any key…”. Anh Rook chỉnh lại dùm.
    Code:
    #include<iostream>
    using namespace std;
    
    
    /* Knight Tour */
    
    
      const int size = 8;
      void initialization();
      void print();
      void Knight ( int times, int row, int col );
    
      bool K[size][size];
      bool check( int row, int col);
      int move_col[] = {-2, -1, +1, +2, +2, +1, -1, -2};
      int move_row[] = {+1, +2, +2, +1, -1, -2, -2, -1};
    
      int row, col, index, next_row, next_col; 
      int times;
    
    
    int main(){
      initialization();
      Knight (0,0,0);
      return 0;
    }  
    
    
    void initialization()
    {
        index =0;
        times = 0;
        row = 0;
        col = 0;
       
        for ( int i=0; i < size; i++)
        {
            for ( int j=0; j < size; j++)
            {
                K[i][j] = false;
            }
        }
    
      K[row][col] = true;
    }
    
    
    bool check ( int row, int col )
    {
        if ( row > 7 || row < 0 || col > 7 || col < 0 || K[row][col] == true )
            return false;
        else
            return true;
    }
    
    void print ()
    {
        index++;
        cout << " Let's go Knight ^^" << endl;
        cout << " The : "<< index << "th"<< endl;
        for ( int k = 0; k < size; k++ )
        {
            for ( int m = 0; m < size; m++ )
            {
                  if ( K[k][m] == true )
                  {    
                    cout << " K " ;
                   
                  }    
                  else 
                    cout << " * ";
            }
        cout << endl;
        }
    }
    void Knight ( int times, int row, int col)
    {
          K[row][col] = true;  
          if ( times >= 63 )
          {
            print();
            cin.get();    
          }    
          else
          {
                  for ( int i = 0; i < 8; i++ )  
                  {
                  
                      next_col = col + move_col[i];
                      next_row = row + move_row[i];
                      
                      if (check( next_row,next_col ))
                      { 
                         
                        Knight (times+1, next_row, next_col);
                         K[next_row][next_col] = false; 					
                      }
                  }
          }
               
    }
    ----------------------------------------------------------------------

    2) Có cái code này chạy được (box giải thuật, trang dưới cùng, đã chỉnh sửa ^ ^).

    3) Nhưng đọc hòai mà không hiểu tại sao khi times bằng 63 lần thì in ra, nhưng in ra thì kết thúc chứ sao lại in được tiếp lần 2? Vì sau câu lệnh if – else đó thì không còn lời gọi hàm nào khác ngòai câu “K[cRow][cCol] = 0”.

    4) Còn 1 vấn đề nữa là, khi xem cái "index 1th" trong chương trình(màn hình đen).

    int horizontal[] = {-2, -1, +1, +2, +2, +1, -1, -2};
    int vertical[] = {+1, +2, +2, +1, -1, -2, -2, -1};

    Cái nước thứ 37 sang 38 tại sao lại đi như vậy? Nếu theo quy tắc từ 0 đến 7 như trên thì nó phải đi đến ô 40 chứ? Nghĩa là nó đã đi đến ô 40, rồi có chuyện gì đó nên nó đã rút lại nước đó, chuyển sang ô phía trên?

    Code:
    #include<iostream>
    #include<iomanip>
    #include<conio.h>
    
    
    using std::cout;
    using std::endl;
    using std::setw;
    using std::cin;
    
      
      const int size = 8;
      void initialization();
      void print();
      void Knight ( int times, int cRow, int cCol );
     
      int K[size][size];
      int check( int nextRow, int nextCol);
      int horizontal[] = {-2, -1, +1, +2, +2, +1, -1, -2};
      int vertical[] = {+1, +2, +2, +1, -1, -2, -2, -1};
     
      int index;
     
    
    
    void main()
    {
       initialization();
       Knight (0,0,0);
    
    	//getch();
    }
    
    void initialization()
    {   
        for ( int i=0; i < size; i++)
        {
            for ( int j=0; j < size; j++)
            {
                K[i][j] = 0;
            }
        }
    }
     
     
    int check ( int nextRow, int nextCol )
    {
        if ( nextRow > 7 || nextRow < 0 || nextCol > 7 || nextCol < 0 || K[nextRow][nextCol] != 0 )
            return 0;
        return 1;
    }
     
    void print()
    {
        index++;
        cout << " Let's go Knight ^^" << endl;
        cout << " The : "<< index << "th"<< endl;
        for ( int i = 0; i < size; i++ )
        {
            for ( int j = 0; j < size; j++ )
            {
                  cout << setw(3) << K[i][j] ;
            }
                    cout << endl << endl;
        }
    }
    void Knight ( int times, int cRow, int cCol)
    {
            int nextRow, nextCol;
            K[cRow][cCol] = times + 1;
            
     
            if ( times >=63 )
            {
                    cout << "-----------------------" << endl;
                    print();
                    getch();
            }
            else
            {
                    for ( int i = 0; i < 8; i++ )  
                    {		
                            nextCol = cCol + horizontal[i];
                            nextRow = cRow + vertical[i];
     
                          if (check(nextRow, nextCol))
                           { 
                               Knight (times+1, nextRow, nextCol);
                           }
     
                    } 
            }                 
            K[cRow][cCol] = 0;		
    		
    }

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Hix, anh post nhầm cái bài sai, đây em xem kĩ anh sữa lại nó in rõ ra các bước đi, cứ enter quan sát sẽ hiểu. Anh dùng tool format lại cho dễ nhìn luôn rùi đó. Sorry anh dạo này bận quá, không giải thích được nhiều, em chịu khó tự coi đã nhé, khi nào anh rảnh anh sẽ giúp
    PHP Code:
    #include<iostream>
    #include<iomanip>

    const int size 8;
    int K[size][size];
    int move_col[] =
        {
            -
    2, -1, +1, +2, +2, +1, -1, -2
        
    };
    int move_row[] =
        {
            +
    1, +2, +2, +1, -1, -2, -2, -1
        
    };
    int count,index;

    void initialization() {
        
    count 0;
        for ( 
    int i=0sizei++)
            for ( 
    int j=0sizej++)
                
    K[i][j] = 0;
    }

    bool check int rowint col ) {
        if ( 
    row || row || col || col || K[row][col] != )
            return 
    false;
        else
            return 
    true;
    }

    void print() {
        
    index++;
        
    cout << " Let's go Knight ^^" << endl;
        
    cout << " The : "<< index << "th"<< endl;
        for ( 
    int i 0sizei++ ) {
            for ( 
    int j 0sizej++ )
                
    cout << setw(3) << K[i][j] ;
                
            
    cout << endl;
        }
    }
    void Knight int timesint rowint col) {
        
    int next_rownext_col;
        
    K[row][col] = times 1;
        if ( 
    times >= 63 ) {
            
    cout << "-----------------------" << endl;
            print();
            
    cin.get();
        }
        else {
            for ( 
    int i 08i++ ) {
                
    next_col col move_col[i];
                
    next_row row move_row[i];
                
                if (
    checknext_row,next_col ))
                    
    Knight (times+1next_rownext_col);
            }
        }
        
    K[row][col] = 0;
    }
    int main() {
        
    initialization();
        
    Knight (0,0,0);


  9. #9
    Ngày gia nhập
    12 2007
    Bài viết
    48

    hì, anh rook tốt bụng thật, vậy mà em tưởng vì hỏi nhiều nên bị người khác ghét, không trả lời rồi ^ ^. Mai mốt sẽ hỏi ít lại, tự tìm hiểu. Chết, lỡ spam rồi T.T.
    Đã được chỉnh sửa lần cuối bởi Emerald214 : 24-02-2008 lúc 04:27 PM.
    "what you don't use you don't pay for" (Bjarne Stroustrup).

  10. #10
    Ngày gia nhập
    01 2013
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Hix, anh post nhầm cái bài sai, đây em xem kĩ anh sữa lại nó in rõ ra các bước đi, cứ enter quan sát sẽ hiểu. Anh dùng tool format lại cho dễ nhìn luôn rùi đó. Sorry anh dạo này bận quá, không giải thích được nhiều, em chịu khó tự coi đã nhé, khi nào anh rảnh anh sẽ giúp
    PHP Code:
    #include<iostream>
    #include<iomanip>

    const int size 8;
    int K[size][size];
    int move_col[] =
        {
            -
    2, -1, +1, +2, +2, +1, -1, -2
        
    };
    int move_row[] =
        {
            +
    1, +2, +2, +1, -1, -2, -2, -1
        
    };
    int count,index;

    void initialization() {
        
    count 0;
        for ( 
    int i=0sizei++)
            for ( 
    int j=0sizej++)
                
    K[i][j] = 0;
    }

    bool check int rowint col ) {
        if ( 
    row || row || col || col || K[row][col] != )
            return 
    false;
        else
            return 
    true;
    }

    void print() {
        
    index++;
        
    cout << " Let's go Knight ^^" << endl;
        
    cout << " The : "<< index << "th"<< endl;
        for ( 
    int i 0sizei++ ) {
            for ( 
    int j 0sizej++ )
                
    cout << setw(3) << K[i][j] ;
                
            
    cout << endl;
        }
    }
    void Knight int timesint rowint col) {
        
    int next_rownext_col;
        
    K[row][col] = times 1;
        if ( 
    times >= 63 ) {
            
    cout << "-----------------------" << endl;
            print();
            
    cin.get();
        }
        else {
            for ( 
    int i 08i++ ) {
                
    next_col col move_col[i];
                
    next_row row move_row[i];
                
                if (
    checknext_row,next_col ))
                    
    Knight (times+1next_rownext_col);
            }
        }
        
    K[row][col] = 0;
    }
    int main() {
        
    initialization();
        
    Knight (0,0,0);

    bạn Khoa hỏi đó có phải là bài Tìm đường đi ngắn nhất của con mã trên bàn cờ vua khi cho trước vị trí xuất phát và vị trí đích, con mã không đc đi qua nhưng ô đã có quân trên bàn cờ???
    anh Rook cho em hỏi, bài này nó # bài mã đi tuần, nhưng mình phải sử dụng thuật toán tìm kiếm để tìm đường đi ngắn nhất ah? mình có thể dùng thuật toán hueristic đc ko?
    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ác đề tài tương tự

  1. "Cấu trúc dữ liệu (C Sharp)" Phương thức tìm kiếm tuần tự FindMax
    Gửi bởi congtoan8888 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 05-01-2013, 12:10 AM
  2. Một tuần sau khi "siết" khuyến mại sim trả trước
    Gửi bởi thanhhung2013 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: 07-10-2011, 10:41 AM
  3. Thắc mắc về "giao diện khả tuần tự trong C#"
    Gửi bởi _adam_ trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 27-07-2011, 08:10 AM
  4. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM
  5. bài tập c++ trong giáo "lập trình hướng đối tượng" - trương công tuấn
    Gửi bởi bobdonaldspears trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 10-09-2010, 11:01 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