Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Biển và Đảo ! Giải thuật và cách triển khai trong C++

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

    Mặc định Biển và Đảo ! Giải thuật và cách triển khai trong C++

    Biển là 1 hình vuông cấp NxN trong đó mỗi đảo là 1 dấu *, nước là 1 dấu cách. Với mỗi biển thì biết số các nhóm đảo và số đảo trong mỗi nhóm ở trên mỗi hàng và trên mỗi cột của biển đó.
    VD

    Thì có các dữ kiện về dòng là
    1 2
    3 1
    1 1 1
    5
    2 1 1
    1
    Có nghĩa
    - Dòng 1 có 2 nhóm đảo, nhóm 1 có 1 đảo, nhóm 2 có 2 đảo
    - Dòng 2 có 2 nhóm đảo, nhóm 1 có 3 đảo, nhóm 2 có 1 đảo
    - Dòng 3 có 3 nhóm đảo, nhóm 1 có 1 đảo, nhóm 2 có 1 đảo, nhóm 3 có 1 đảo
    - ……
    Các dữ kiện về cột là (với ý nghĩa tương tự)
    1 1 1
    1 2
    4
    2 3
    2
    1 2

    Yêu cầu: từ các thông tin về hạn chế dòng, cột hãy xây dựng lại bản đồ

    INPUT : DAO.INP
    - Dòng đầu ghi số N
    - N dòng tiếp ghi lần lượt các dữ kiện về dòng
    - N dòng tiếp nữa ghi lần lượt các dữ kiện về cột
    OUTPUT: DAO.OUT : ghi ra bản đồ đảo xây dựng đc

    Bài này thì mình cũng đang làm.hì hì ! Các bạn cùng làm nhé !
    Đã được chỉnh sửa lần cuối bởi rox_rook : 23-10-2007 lúc 01:21 PM. Lý do: Sai đề ^^

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

    Hiện tại rox_rock có ý tưởng gì chưa nhỉ ?

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

    hì hì ! Cuối cùng có người vào làm chung roài ^^ ! Hiên đang ngày trong tuần nên mình chưa có rảnh, có gì cuối tuần thảo luận tiếp nhé kid. Theo mình bài này dùng quay lùi và đặt cận rất có khả năng giải ra. Để cuối tuần mình thử xem sao nhé. Thanks Kid đã quan tâm !

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

    Quay lai + điều kiện thì hơi khó đấy rox_rook, có nhiều điều kiện . Bài này khó ăn đấy.

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Mình có ý tưởng thế này:
    - Trước hết mình dựa vào dữ liệu dòng để sắp xếp trước. Ví dụ: dữ liệu là 1 2, thì ta tạ sắp xếp: * 0 * *. Như vậy là thỏa mãn có 1 đảo và 1 nhóm đảo gồm 2 đảo.
    - Sau khi sắp xếp hết các dòng theo dữ liệu. Ta bắt đầu dựa vào dữ liệu cột để tìm các cách di chuyển dòng sao cho phù hợp. Áp dụng thuật toán quay lui + nhánh cận thì có thể tìm ra đáp án.
    Mình mới nghĩ ra thôi, không biết có tối ưu hay không?
    Không biết ghi gì luôn ...

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

    Mặc định Biển và Đảo ! Giải thuật và cách triển khai trong C++

    Hì hì ! Mấy bài dạng này đúng là hành hạ tinh thần! Và đây là cách giải của mình dựa vào ý tưởng quay lùi và đánh giá cận. Khi ta xét hết 1 dòng hay 1 cột thì ta sẽ kiểm tra, chú ý chỗ đặt nhánh với ý tưởng là ta sẽ dễ dàng có được tổng số biển từ dữ liệu vào của bài toán, như vậy nếu tại 1 thời điểm i nào đó, nếu vô tình số biển đi quá dữ liệu thì ta cắt ngay nhánh và chuyển sang hướng khác, tuy nhiên điều kiện này chỉ ở mức tương đối, có lẽ sẽ còn nhiều cách đặt điều kiện hay nữa.
    PHP Code:
    #include <iostream>
    using std::endl;
    using std::cout;
    using std::cin;

    #include <fstream>
    using std::ifstream;
    using std::ofstream;


    #include <iomanip>
    using std::setw;

    #include <cstdlib>/* exit() prototype*/
    using std::cerr;

    #define FI "Island.inp"
    #define maxx 100

    using namespace std;

    int rowInfo[maxx][maxx],
        
    colInfo[maxx][maxx],
        
    ROW[maxx],
        
    COL[maxx],
        
    Grid[maxx][maxx],
        
    sumRowIsland[maxx],
        
    sumColIsland[maxx];
        
    int sizeMap;

    void ReadInput()
    {
          
    ifstream inFile "Island.inp"ios::in);
          
    inFile >> sizeMap;
          
          for ( 
    int x 0sizeMapx++ ){
                
    inFile >> ROW[x];
                for ( 
    int y 0ROW[x]; y++ ){
                      
    inFile >> rowInfo[x][y];
                }
          }
         
          for ( 
    int x 0sizeMapx++ ){
                
    inFile >> COL[x];
                for ( 
    int y 0COL[x]; y++ ){
                      
    inFile >> colInfo[x][y];
                }
          }
          
    inFile.close();
    }
    bool checkROW (int rowInfo[][maxx], int rowPosition)
    {
          
    int vaR,   /* Running variables*/ 
              
    reG,   /* Islands is divided into reG region*/
              
    isL;   /* The number of Island*/
        
              /*Initilalize info*/
              
    isL = vaR = reG 0;
        
          
          while (vaR < 
    sizeMap)
          {
                if (
    Grid[rowPosition][vaR] == 1)
                {      
                      
    isL isL 1;
                }
                
                if ((
    Grid[rowPosition][vaR] == 0) || (vaR == sizeMap-1))
                {
                      if (
    isL 0)
                      {
                            if (
    rowInfo[rowPosition][reG] == isL)
                            {
                                  
    isL 0;       /*Return island = 0, check to the next region*/
                                  
    reG reG 1/*Increase region*/
                            
    }
                            else
                                  return 
    false;
                      }
                }
                vaR = vaR +
    1/*Increase until it touches the edge of sizeMap*/
          
    }
          
          
    /*If region == orginal Information return true*/
          
    if (reG == ROW[rowPosition])
            return 
    true;
        
          return 
    false;
    }


    bool checkCOL int colInfo[][maxx], int colPosition)
    {
          
    int vaR,   /* Running variables*/ 
              
    reG,   /* Islands is divided into reG region*/
              
    isL;   /* The number of Island*/
        
              /*Initilalize info*/
              
    isL = vaR = reG 0;
      
          while (vaR < 
    sizeMap)
          {
                if (
    Grid[vaR][colPosition] == 1)
                {
                      
    isL isL 1;
                }
                
                if ((
    Grid[vaR][colPosition] == 0) || (vaR == sizeMap-1))
                {     
                      if (
    isL 0)
                      {
                            if (
    colInfo[colPosition][reG] == isL)
                            {
                                  
    isL 0/*Return island = 0, check to the next region*/
                                  
    reG++;   /*Increase region*/
                            
    }
                            else
                                  return 
    false;
                      }
                }
                vaR = vaR + 
    1;/*Increase until it touches the edge of sizeMap*/
                      
          
    }
        
          
    /*If region == orginal Information return true*/
          
    if (reG == COL[colPosition])
                return 
    true;
        
          return 
    false;
    }

    void WriteOutput()
    {       
          
    ofstream outFile "Island.out"ios::out);
          if ( !
    outFile )
          {
                
    cerr << "File could not opened " << endl;
                exit(
    1);
          }
        
          for ( 
    int x 0sizeMapx++){                
                for (
    int y 0sizeMapy++){
                      if (
    Grid[x][y] == 1)
                            
    outFile << "*";
                      else  
    outFile << "~";
                }
                
    outFile << "\n";
          }
         
    outFile.close();
    }

    /*Function calculate Islands is for Branch_Bound technique*/
    void CalculateIsland()
    {
          for ( 
    int x 0sizeMapx++ ){
                for ( 
    int y 0sizeMapy++ ){
                      if ( 
    rowInfo[x][y] != ){
                            
    sumRowIsland[x] += rowInfo[x][y];
                      }
                      else if ( 
    colInfo[x][y] != ){
                            
    sumColIsland[y] += colInfo[x][y];
                      }
                }
          }
    }

    void SearchIsland (int xPosint yPos)
    {
          
    int rowCount,
              
    colCount;

          
    rowCount 0;
          
    colCount 0;
          
    /*Backtrack until it touch the final Horizontal or Vertical*/
          
    if ((xPos == sizeMap) && (yPos == sizeMap))
          {
            if ( 
    checkROW (rowInfoxPos) && checkCOL (colInfoyPos) )
            
    WriteOutput();
          }
          else
          {
                
    /*Branch Bound : cut unnessary branches */
                
    for ( int i 0yPosi++ ){
                      if ( 
    Grid[xPos][i] == ){
                            
    colCount++;
                      }
                }
                for ( 
    int j 0xPosj++ ){
                      if ( 
    Grid[j][yPos] == ){
                            
    rowCount++;
                      }
                }
                
                
               
    /*If at one point of time, the total of island is over orginal information, break right away*/
                
    if ( colCount sumRowIsland[xPos] || rowCount sumColIsland[yPos] ) ;
          
                
                if (
    xPos == sizeMap)
                {
                      if (
    checkCOL (colInfoyPos))
                            
    SearchIsland (xPosyPos+1);
                }
          
                else if (
    yPos == sizeMap)
                {
                      if (
    checkROW (rowInfoxPos))
                            
    SearchIsland (xPos+10);
                }
                else
                {
                      
    /*Mark whether is Island or Sea- BackTrack section*/
                      
    for(int _is 0_is <= 1_is++)
                      {
                            
    Grid[xPos][yPos] = _is;
                            
    SearchIsland (xPosyPos+1);
                      }
                }
          }
    }
    int main()
    {
          
    ReadInput();
          
    CalculateIsland();
          
    SearchIsland (00);
          
    system("pause");
          return 
    0;

    Nếu ht961711 có cách đánh giá cận chặt chẽ hơn thì cho mình tham khảo nhé ! Thân !
    Đã được chỉnh sửa lần cuối bởi rox_rook : 12-11-2007 lúc 01:57 PM.

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Nếu ht961711 có cách đánh giá cận chặt chẽ hơn thì cho mình tham khảo nhé ! Thân !
    Những ngày vừa rùi bận quá ko tham gia được. Mình sẽ tham khảo và học hỏi nhiều ở bạn
    Không biết ghi gì luôn ...

  8. #8
    Ngày gia nhập
    11 2006
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Hì hì ! Mấy bài dạng này đúng là hành hạ tinh thần! Và đây là cách giải của mình dựa vào ý tưởng quay lùi và đánh giá cận. Khi ta xét hết 1 dòng hay 1 cột thì ta sẽ kiểm tra, chú ý chỗ đặt nhánh với ý tưởng là ta sẽ dễ dàng có được tổng số biển từ dữ liệu vào của bài toán, như vậy nếu tại 1 thời điểm i nào đó, nếu vô tình số biển đi quá dữ liệu thì ta cắt ngay nhánh và chuyển sang hướng khác, tuy nhiên điều kiện này chỉ ở mức tương đối, có lẽ sẽ còn nhiều cách đặt điều kiện hay nữa.
    PHP Code:
    #include <iostream>
    using std::endl;
    using std::cout;
    using std::cin;

    #include <fstream>
    using std::ifstream;
    using std::ofstream;


    #include <iomanip>
    using std::setw;

    #include <cstdlib>/* exit() prototype*/
    using std::cerr;

    #define FI "Island.inp"
    #define maxx 100

    using namespace std;

    int rowInfo[maxx][maxx],
        
    colInfo[maxx][maxx],
        
    ROW[maxx],
        
    COL[maxx],
        
    Grid[maxx][maxx],
        
    sumRowIsland[maxx],
        
    sumColIsland[maxx];
        
    int sizeMap;

    void ReadInput()
    {
          
    ifstream inFile "Island.inp"ios::in);
          
    inFile >> sizeMap;
          
          for ( 
    int x 0sizeMapx++ ){
                
    inFile >> ROW[x];
                for ( 
    int y 0ROW[x]; y++ ){
                      
    inFile >> rowInfo[x][y];
                }
          }
         
          for ( 
    int x 0sizeMapx++ ){
                
    inFile >> COL[x];
                for ( 
    int y 0COL[x]; y++ ){
                      
    inFile >> colInfo[x][y];
                }
          }
          
    inFile.close();
    }
    bool checkROW (int rowInfo[][maxx], int rowPosition)
    {
          
    int vaR,   /* Running variables*/ 
              
    reG,   /* Islands is divided into reG region*/
              
    isL;   /* The number of Island*/
        
              /*Initilalize info*/
              
    isL = vaR = reG 0;
        
          
          while (vaR < 
    sizeMap)
          {
                if (
    Grid[rowPosition][vaR] == 1)
                {      
                      
    isL isL 1;
                }
                
                if ((
    Grid[rowPosition][vaR] == 0) || (vaR == sizeMap-1))
                {
                      if (
    isL 0)
                      {
                            if (
    rowInfo[rowPosition][reG] == isL)
                            {
                                  
    isL 0;       /*Return island = 0, check to the next region*/
                                  
    reG reG 1/*Increase region*/
                            
    }
                            else
                                  return 
    false;
                      }
                }
                vaR = vaR +
    1/*Increase until it touches the edge of sizeMap*/
          
    }
          
          
    /*If region == orginal Information return true*/
          
    if (reG == ROW[rowPosition])
            return 
    true;
        
          return 
    false;
    }


    bool checkCOL int colInfo[][maxx], int colPosition)
    {
          
    int vaR,   /* Running variables*/ 
              
    reG,   /* Islands is divided into reG region*/
              
    isL;   /* The number of Island*/
        
              /*Initilalize info*/
              
    isL = vaR = reG 0;
      
          while (vaR < 
    sizeMap)
          {
                if (
    Grid[vaR][colPosition] == 1)
                {
                      
    isL isL 1;
                }
                
                if ((
    Grid[vaR][colPosition] == 0) || (vaR == sizeMap-1))
                {     
                      if (
    isL 0)
                      {
                            if (
    colInfo[colPosition][reG] == isL)
                            {
                                  
    isL 0/*Return island = 0, check to the next region*/
                                  
    reG++;   /*Increase region*/
                            
    }
                            else
                                  return 
    false;
                      }
                }
                vaR = vaR + 
    1;/*Increase until it touches the edge of sizeMap*/
                      
          
    }
        
          
    /*If region == orginal Information return true*/
          
    if (reG == COL[colPosition])
                return 
    true;
        
          return 
    false;
    }

    void WriteOutput()
    {       
          
    ofstream outFile "Island.out"ios::out);
          if ( !
    outFile )
          {
                
    cerr << "File could not opened " << endl;
                exit(
    1);
          }
        
          for ( 
    int x 0sizeMapx++){                
                for (
    int y 0sizeMapy++){
                      if (
    Grid[x][y] == 1)
                            
    outFile << "*";
                      else  
    outFile << "~";
                }
                
    outFile << "\n";
          }
         
    outFile.close();
    }

    /*Function calculate Islands is for Branch_Bound technique*/
    void CalculateIsland()
    {
          for ( 
    int x 0sizeMapx++ ){
                for ( 
    int y 0sizeMapy++ ){
                      if ( 
    rowInfo[x][y] != ){
                            
    sumRowIsland[x] += rowInfo[x][y];
                      }
                      else if ( 
    colInfo[x][y] != ){
                            
    sumColIsland[y] += colInfo[x][y];
                      }
                }
          }
    }

    void SearchIsland (int xPosint yPos)
    {
          
    int rowCount,
              
    colCount;

          
    rowCount 0;
          
    colCount 0;
          
    /*Backtrack until it touch the final Horizontal or Vertical*/
          
    if ((xPos == sizeMap) && (yPos == sizeMap))
          {
            if ( 
    checkROW (rowInfoxPos) && checkCOL (colInfoyPos) )
            
    WriteOutput();
          }
          else
          {
                
    /*Branch Bound : cut unnessary branches */
                
    for ( int i 0yPosi++ ){
                      if ( 
    Grid[xPos][i] == ){
                            
    colCount++;
                      }
                }
                for ( 
    int j 0xPosj++ ){
                      if ( 
    Grid[j][yPos] == ){
                            
    rowCount++;
                      }
                }
                
                
               
    /*If at one point of time, the total of island is over orginal information, break right away*/
                
    if ( colCount sumRowIsland[xPos] || rowCount sumColIsland[yPos] ) ;
          
                
                if (
    xPos == sizeMap)
                {
                      if (
    checkCOL (colInfoyPos))
                            
    SearchIsland (xPosyPos+1);
                }
          
                else if (
    yPos == sizeMap)
                {
                      if (
    checkROW (rowInfoxPos))
                            
    SearchIsland (xPos+10);
                }
                else
                {
                      
    /*Mark whether is Island or Sea- BackTrack section*/
                      
    for(int _is 0_is <= 1_is++)
                      {
                            
    Grid[xPos][yPos] = _is;
                            
    SearchIsland (xPosyPos+1);
                      }
                }
          }
    }
    int main()
    {
          
    ReadInput();
          
    CalculateIsland();
          
    SearchIsland (00);
          
    system("pause");
          return 
    0;

    Nếu ht961711 có cách đánh giá cận chặt chẽ hơn thì cho mình tham khảo nhé ! Thân !
    Theo mình nghĩ thì cách code này sẽ không chạy được vì mình cũng copy về rồi chạy mà không thấy gì hệt với lại cái ý tưởng theo mình nghĩ thì đúng nhưng mà cách code thi sai theo mình nghĩ hàm "checkROW " cần tính tất các các khả năng của hàng này tức là liệt kê các cách điền các đảo thoải mãn yêu cầu cuả hàng hàm "SearchIsland " lần lượt sét đến cách điền của từng hàng
    Còn nhánh cận sẽ dùng đến cột để loại bỏ những trường hợp chắc chắn sai theo ý tưognr của mình thì hàm "checkROW" sẽ dùngđến thuật toán về tổ hợp chập "Hiểu biết nông cạn mong chỉ giáo"

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

    Hì hì, bài này mình làm lâu lắm rùi, bạn cũng tinh ý ghê^^! Mình tin là giải thuật không sai, nhưng cái này mình paste vô sai, sorry nhé, nhưng lỗi này rất dễ phát hiện, bạn suy nghĩ thử xem sao ^^, Hàm checkROW không sai, cái sai của mình là lúc đó mình đã thử tối ưu nó thêm 1 chút nhưng tiếc là nó sai, bài này làm cũng vất vả lắm nên cũng có ấn tượng hì hì ! Dù sao cũng rất cám ơn sự quan tâm của bạn, box giải thuật và cấu trúc dữ liệu nó đang ế ẩm quá đây nè ~~. Đây là output của mình nè :
    Input
    Code:
    6
    2 1 2
    2 3 1
    3 1 1 1
    1 5
    3 2 1 1
    1 1
    
    3 1 1 1
    2 1 2
    1 4
    2 2 3
    1 2
    2 1 2
    Output :

    Code:
    *~**~~
    ~***~*
    *~*~*~
    ~*****
    **~*~*
    ~~~*~~

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

    Edit version dùng class, bảo đảm chạy ok T_T :
    C++ Code:
    1. #include <iostream>
    2. #include <fstream>
    3. #include <iomanip>
    4. #include <cstdlib>
    5.  
    6. class Island{
    7. private :
    8.     static const int maxx = 100;
    9.     int _rrowInfo[maxx][maxx],
    10.         _ccolInfo[maxx][maxx],
    11.         _rrow[maxx],_ccol[maxx],
    12.         _grid[maxx][maxx],
    13.         row_value[maxx],
    14.         column_value[maxx];
    15.     int size;
    16.  
    17. public :
    18.     Island();
    19.     void read_data_from_file();
    20.     bool check_rrow (int _rrowInfo[][maxx], int dx) const;
    21.     bool check_ccol ( int _ccolInfo[][maxx], int dy) const;
    22.     void print_out_solution() const;
    23.     void recursive_searching_island (int xcor, int ycor);
    24.     void count_island();
    25. };
    26.  
    27. Island::Island()
    28. {
    29.     size = 10;
    30.     for ( int x = 0; x < maxx; ++x ){
    31.         for ( int y = 0; y < maxx; ++y ){
    32.             _rrowInfo[x][y] = _ccolInfo[x][y] = 0;
    33.             _grid[x][y] = 0;
    34.         }
    35.         row_value[x] = column_value[x] = 0;
    36.         _rrow[x] = _ccol[x] = 0;
    37.     }
    38. }
    39.  
    40. void Island::read_data_from_file()
    41. {
    42.     std::ifstream iss("Omg.txt", std::ios::in);
    43.     iss >> size;
    44.     for(int x = 0; x < size; ++x){
    45.         iss >> _rrow[x];
    46.         for(int y = 0; y < _rrow[x]; ++y){
    47.             iss >> _rrowInfo[x][y];
    48.         }
    49.     }
    50.     for ( int x = 0; x < size; ++x ){
    51.         iss >> _ccol[x];
    52.         for ( int y = 0; y < _ccol[x]; ++y ){
    53.             iss >> _ccolInfo[x][y];
    54.         }
    55.     }
    56.     iss.close();
    57. }
    58.  
    59. bool Island::check_rrow(int _rrowInfo[][maxx], int dx) const
    60. {
    61.     int isL, vaR, reG;
    62.     isL = vaR = reG = 0;
    63.     while (vaR < size){
    64.         if (_grid[dx][vaR] == 1){      
    65.             isL = isL + 1;
    66.         }
    67.            
    68.         if ((_grid[dx][vaR] == 0) || (vaR == size-1))
    69.         {
    70.             if (isL > 0)
    71.             {
    72.                 if (_rrowInfo[dx][reG] == isL)
    73.                 {
    74.                     isL = 0;      
    75.                     reG = reG + 1;
    76.                 }
    77.                 else
    78.                     return false;
    79.             }
    80.         }
    81.         vaR = vaR +1;
    82.     }
    83.     if (reG == _rrow[dx])
    84.         return true;
    85.    
    86.     return false;
    87. }
    88.  
    89.  
    90. bool Island::check_ccol(int _ccolInfo[][maxx], int dy) const
    91. {
    92.     int isL, vaR, reG;
    93.     isL = vaR = reG = 0;
    94.     while (vaR < size)
    95.     {
    96.         if (_grid[vaR][dy] == 1)
    97.         {
    98.             isL = isL + 1;
    99.         }
    100.            
    101.         if((_grid[vaR][dy] == 0) || (vaR == size-1))
    102.         {    
    103.             if(isL > 0)
    104.             {
    105.                 if (_ccolInfo[dy][reG] == isL)
    106.                 {
    107.                     isL = 0;
    108.                     reG++;  
    109.                 }
    110.                 else
    111.                     return false;
    112.             }
    113.         }
    114.         vaR = vaR + 1;
    115.     }
    116.     if (reG == _ccol[dy])
    117.         return true;
    118.    
    119.     return false;
    120. }
    121.  
    122. void Island::print_out_solution() const
    123. {      
    124.     for ( int x = 0; x < size; ++x){                
    125.         for (int y = 0; y < size; ++y){
    126.             if (_grid[x][y] == 1)
    127.                 std::cout << " * ";
    128.             else  std::cout << " ~ ";
    129.         }
    130.         std::cout << "\n\n";
    131.    }
    132. }
    133.  
    134.  
    135. void Island::count_island()
    136. {
    137.     for(int x = 0; x < size; ++x)
    138.     {
    139.         for(int y = 0; y < size; ++y)
    140.         {
    141.             if(_rrowInfo[x][y] != 0)
    142.                 row_value[x] += _rrowInfo[x][y];
    143.             else if ( _ccolInfo[x][y] != 0)
    144.                 column_value[y] += _ccolInfo[x][y];
    145.         }
    146.     }
    147. }
    148.  
    149. void Island::recursive_searching_island(int xcor, int ycor)
    150. {
    151.     if ((xcor == size) && (ycor == size))
    152.     {
    153.         if ( check_rrow (_rrowInfo, xcor) && check_ccol (_ccolInfo, ycor) )
    154.         print_out_solution();
    155.     }
    156.     else{
    157.         if (xcor == size)
    158.         {
    159.             if (check_ccol (_ccolInfo, ycor))
    160.                 recursive_searching_island (xcor, ycor+1);
    161.         }
    162.      
    163.         else if (ycor == size)
    164.         {
    165.             if (check_rrow (_rrowInfo, xcor))
    166.                 recursive_searching_island (xcor+1, 0);
    167.         }
    168.         else{
    169.             for(int _is = 0; _is <= 1; _is++)
    170.             {
    171.                 _grid[xcor][ycor] = _is;
    172.                 recursive_searching_island (xcor, ycor+1);
    173.             }
    174.         }
    175.     }
    176. }
    177. int main()
    178. {
    179.     Island oops;
    180.     oops.read_data_from_file();
    181.     oops.count_island();
    182.     oops.recursive_searching_island(0, 0);
    183.     return 0;
    184. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 07-03-2008 lúc 10:08 AM.

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

  1. Khai giảng khóa học: Phát triển dự án Web với ASP.NET MVC 4
    Gửi bởi ngoctoan 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: 29-10-2013, 09:04 AM
  2. Thuật toán khai triển số nguyên n theo cơ số b
    Gửi bởi kingwarcraft trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 21-03-2012, 01:43 PM
  3. Không thể giải mã hệ mật mã RSA khi triển khai webserver trên IIS
    Gửi bởi nguyenduykhanh1986 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 19-03-2012, 01:37 PM
  4. laptopvip.vnTặng quà khai trương trị giá đến $150 và giảm giá đến 3 triệu
    Gửi bởi dtraovat00001 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: 20-12-2011, 02:50 PM
  5. Giải thuật quicksort triển khai trên C?
    Gửi bởi bachkhoa9x trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 03-08-2011, 11:27 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