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])   
               {                  
                  

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