Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 19 kết quả

Đề tài: Xác định số Miền Lớn Nhất trong lập trình C/C++

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

    Mặc định Xác định số Miền Lớn Nhất trong lập trình C/C++

    Không biết nói sau. Cho cái ví dụ thế này:

    1 1 1 2 2 2 3 2
    1 1 2 2 3 3 3 1
    2 2 2 2 1 1 1 1
    2 2 2 2 2 1 1 1

    Đề bài yêu cầu là nêu ra số miền, và giá trị miền lớn nhất.
    Miền là tập hợp những phần tử gần nhau ( ngang, dọc ) có cùng giá trị n ( n từ 1-10). miền lớn nhất là miền có nhiều phần tử nhất.

    File vào có dạng :
    n m với n là số pt trên hàng, m là cột .
    các hàng tiếp theo thể hiện như vd.

    File ra có dạng :
    x : số miền. y là số phần tử miền lớn nhất.


    Lâu rồi, thảo luận lại cho nó vui tí. he he

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

    Bài này r2 nghĩ thuật toán loang T_T, khỏi chạy đi đâu được hết !

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    nếu kích thước nhỏ vậy, thì in ra màn hình mà nhìn ).

  4. #4
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Bài này r2 nghĩ thuật toán loang T_T, khỏi chạy đi đâu được hết !
    Hôm trước bàn luận bài bên kia, rr nói sẽ code. Vậy xong chưa post lên mọi người trao đổi coi.
    Mình cũng không có thời gian nên cũng chưa có code được.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    Hôm trước bàn luận bài bên kia, rr nói sẽ code. Vậy xong chưa post lên mọi người trao đổi coi.
    Mình cũng không có thời gian nên cũng chưa có code được.
    No more coding T_T! Everybody complained !!!

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

    Mặc định Code cho xác định miền lớn nhất bằng C++!

    Lần sau không có khích tướng nữa nha OnlyLove T_T :
    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3. typedef unsigned int USI;
    4. typedef std::vector<int> values;
    5. typedef values::iterator _pointer;
    6. typedef values::const_iterator _constPtr;
    7. static int matrix[6][10] = { {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
    8.                              {-1,  1,  1,  1,  2,  2,  2,  3,  2, -1},
    9.                              {-1,  1,  1,  2,  2,  3,  3,  3,  1, -1},
    10.                              {-1,  2,  2,  2,  2,  1,  1,  1,  1, -1},
    11.                              {-1,  2,  2,  2,  2,  2,  1,  1,  1, -1},
    12.                              {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}  };
    13.  
    14. void RecursiveCounting(USI xCor, USI yCor, int _type, _pointer _updatedArea)
    15. {
    16.     matrix[xCor][yCor] = -1;
    17.     *_updatedArea = *_updatedArea + 1;
    18.  
    19.     // *-case [xCor + 1][yCor]
    20.     if(matrix[xCor + 1][yCor] == _type && matrix[xCor + 1][yCor] != -1)
    21.         RecursiveCounting(xCor + 1, yCor, _type, _updatedArea);
    22.        
    23.     // *-case [xCor - 1][yCor]
    24.     if(matrix[xCor - 1][yCor] == _type && matrix[xCor  - 1][yCor] != -1)
    25.         RecursiveCounting(xCor - 1, yCor, _type, _updatedArea);
    26.    
    27.     // *-case [xCor][yCor +  1]
    28.     if(matrix[xCor][yCor + 1] == _type && matrix[xCor][yCor +  1] != -1)
    29.         RecursiveCounting(xCor, yCor + 1, _type, _updatedArea);
    30.  
    31.     // *-case [xCor][yCor -  1]
    32.     if(matrix[xCor][yCor - 1] == _type && matrix[xCor][yCor -  1] != -1)
    33.         RecursiveCounting(xCor, yCor - 1, _type, _updatedArea);
    34. }
    35.  
    36. void FindingMaximumArea(int type, _pointer _sArea, USI _srow, USI _scol)
    37. {
    38.     int maximum_area = 0;
    39.     for(int dx = 1; dx <= _srow; ++dx)
    40.     {
    41.         for(int dy = 1; dy <= _scol; ++dy)
    42.         {
    43.             if(matrix[dx][dy] != -1 && matrix[dx][dy] == type)
    44.             {
    45.                 *_sArea = 0;
    46.                 RecursiveCounting(dx, dy, type, _sArea);
    47.                 if(*_sArea > maximum_area)
    48.                     maximum_area = *_sArea;
    49.             }
    50.         }
    51.     }
    52.     *_sArea = maximum_area;
    53. }
    54.                
    55. int main()
    56. {
    57.     USI max_value = 0;
    58.     const USI _srow = 4;
    59.     const USI _scol = 8;
    60.     values _Area(3, 0);
    61.     values _typeArea;
    62.     _typeArea.push_back(1);
    63.     _typeArea.push_back(2);
    64.     _typeArea.push_back(3);
    65.    
    66.     USI _next = 0;
    67.     for(_pointer iss = _Area.begin(); iss != _Area.end(); ++iss){
    68.         FindingMaximumArea(_typeArea[_next], iss, _srow, _scol);
    69.         _next = _next + 1;
    70.     }
    71.     for(_constPtr iss = _Area.begin(); iss != _Area.end(); ++iss){
    72.         if(max_value < *iss)
    73.             max_value = *iss;
    74.     }
    75.    
    76.     std::cout << "The largest domain : " << max_value << "\n";
    77.     return 0;
    78. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 13-03-2008 lúc 11:47 AM.

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

    OK chính xác, mặc dù cậu code khó hiểu, nhưng ok. Có điều với bài này còn cách nào khác hay ko ?

    Bài này có 2 cách ( tớ biết )
    + 1, áp dụng các thuật toán như dfs,bfs để giải quyết ( R2 - DFS (ko phải loang nhé. ))
    + 2, quy về đồ thị.

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

    Mặc định Code cho xác định miền lớn nhất bằng C++!

    Code bài đó viết quá ngu T_T, đúng là vội chẳng có kết quả gì, this one is 100% more efficient and much easier to read T_T :
    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3.  
    4. typedef unsigned int USI;
    5. static int matrix[6][10] = { {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
    6.                              {-1,  1,  1,  1,  2,  2,  2,  3,  2, -1},
    7.                              {-1,  1,  1,  2,  2,  3,  3,  3,  1, -1},
    8.                              {-1,  2,  2,  2,  2,  1,  1,  1,  1, -1},
    9.                              {-1,  2,  2,  2,  2,  2,  1,  1,  1, -1},
    10.                              {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1} };
    11.  
    12. void RecursiveCounting(USI xCor, USI yCor, int _type, USI& _updatedArea)
    13. {
    14.   matrix[xCor][yCor] = -1;
    15.   _updatedArea = _updatedArea + 1;
    16.  
    17.   // *-case [xCor + 1][yCor]
    18.   if(matrix[xCor + 1][yCor] == _type && matrix[xCor + 1][yCor] != -1)
    19.     RecursiveCounting(xCor + 1, yCor, _type, _updatedArea);
    20.        
    21.   // *-case [xCor - 1][yCor]
    22.   if(matrix[xCor - 1][yCor] == _type && matrix[xCor  - 1][yCor] != -1)
    23.     RecursiveCounting(xCor - 1, yCor, _type, _updatedArea);
    24.    
    25.   // *-case [xCor][yCor +  1]
    26.   if(matrix[xCor][yCor + 1] == _type && matrix[xCor][yCor +  1] != -1)
    27.     RecursiveCounting(xCor, yCor + 1, _type, _updatedArea);
    28.  
    29.   // *-case [xCor][yCor -  1]
    30.   if(matrix[xCor][yCor - 1] == _type && matrix[xCor][yCor -  1] != -1)
    31.     RecursiveCounting(xCor, yCor - 1, _type, _updatedArea);
    32. }
    33.  
    34. void FindingMaximumArea(USI _srow, USI _scol, USI& _sArea)
    35. {
    36.   int maximum_area = 0;
    37.   for(int dx = 1; dx <= _srow; ++dx){
    38.     for(int dy = 1; dy <= _scol; ++dy){
    39.       switch(matrix[dx][dy])
    40.       {
    41.         case 1 :
    42.           if(matrix[dx][dy] != -1 && matrix[dx][dy] == 1){
    43.             _sArea = 0;
    44.             RecursiveCounting(dx, dy, 1, _sArea);
    45.             if(_sArea > maximum_area)
    46.               maximum_area = _sArea;
    47.           }
    48.           break;
    49.         case 2 :
    50.           if(matrix[dx][dy] != -1 && matrix[dx][dy] == 2){
    51.             _sArea = 0;
    52.             RecursiveCounting(dx, dy, 2, _sArea);
    53.             if(_sArea > maximum_area)
    54.               maximum_area = _sArea;
    55.           }
    56.           break;
    57.         default : //i.e case 3
    58.           if(matrix[dx][dy] != -1 && matrix[dx][dy] == 3){
    59.             _sArea = 0;
    60.             RecursiveCounting(dx, dy, 3, _sArea);
    61.             if(_sArea > maximum_area)
    62.               maximum_area = _sArea;
    63.           }
    64.           break;
    65.       }
    66.     }
    67.   }
    68.   _sArea = maximum_area;
    69. }
    70.    
    71.  
    72.                
    73. int main()
    74. {
    75.   USI max_value = 0;
    76.   const USI _srow = 4;
    77.   const USI _scol = 8;
    78.    
    79.   FindingMaximumArea(_srow, _scol, max_value);
    80.   std::cout << "The largest domain : " << max_value << "\n";
    81.  
    82.   return 0;
    83. }

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

    Cậu lại sai nữa rồi . R2 à, chỉ có ý đúng thôi.

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

    Cậu lại sai nữa rồi . R2 à, chỉ có ý đúng thôi.
    Sai chỗ nào vậy Kid ?
    + 1, áp dụng các thuật toán như dfs,bfs để giải quyết ( R2 - DFS (ko phải loang nhé. ))
    + 2, quy về đồ thị.
    DFS và BFS là các thuật toán cơ bản trên đồ thị mà ? DFS = loang = tìm kiếm theo chiều sâu ? Cái này thì mình làm bài rùi thấy nó ghi thế, vì bản chất loang là quét duyệt theo DFS.
    Đã được chỉnh sửa lần cuối bởi rox_rook : 13-03-2008 lúc 08:44 PM.

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

  1. Trả lời: 6
    Bài viết cuối: 01-05-2013, 11:10 AM
  2. Socket trong phần mềm chat video, làm thế nào để tín hiệu nhận được nhanh nhất.
    Gửi bởi toctai trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 13-06-2012, 09:19 AM
  3. Tim từ ngắn nhất và dài nhất trong chuổi lỗi has stopped working?
    Gửi bởi satthuprao trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 3
    Bài viết cuối: 27-05-2012, 11:51 AM
  4. Code cho ẩn kí tự khi nhập password vào textbox trong form đăng nhập
    Gửi bởi mrkiemhiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 16-03-2011, 11:10 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