ACM第二次練習—1011

題意:在一個網格矩陣中尋找不同油礦 , 當遇到“@”時 , 這個點上 下 左 右 斜角上是“@”的點屬於同一個油礦。找到最多一次能連接幾個油礦。

思路:深度優先搜索,遞歸。

感想:雖然是個講過的例題,但自己寫出來也是有自豪感。

代碼:

#include <cstdlib>

#include <iostream>

#include <cstring>

using namespace std;


char grid[101][101];
bool flag[101][101];

int dir[][2] = {{-1,1} , {0,1} , {1,1} , {1,0} , {1,-1} , {0,-1} , {-1,-1} , {-1,0}};

void DFS(int x,int y,int m,int n)
{    
 flag[x][y] = true;   
 for(int i=0;i<8;i++)
 {
  int xx = x + dir[i][0];
  int yy = y + dir[i][1];
  if(xx >= 0 && xx < m && yy >= 0 && yy < n && !flag[xx][yy] && grid[xx][yy] == ‘@')    
   DFS(xx,yy,m,n);          
 }
}

int main()
{
    int m , n , count;
    int i , j;
    while(cin >> m >> n && m+n)  
   {        
       memset(flag,false,sizeof(flag));  
       for(i = 0; i < m; i++)          
          for(j=0; j < n; j++)             
              cin >> grid[i][j];                      
   
       count = 0;                 
      for(i = 0; i < m; i++)          
         for(j=0;j<n;j++)          
         {               
                if(grid[i][j] == '@' && !flag[i][j])   
               {                  
                  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章