• hdu 1241 Oil Deposits


    非递归
    # include<iostream>
    # include<string>
    using namespace std;
    string  map[100];
    int mark[100][100];
    struct oil
    {
        int x;
        int y;
    };
    int dir[8][2]={0,-1,0,1,-1,0,1,0,1,1,1,-1,-1,1,-1,-1};
    oil arr[10000];
    
    int main()
    {
    int m,n;
    int x,y,a,b;
       while(cin>>m>>n&&m)
       {   
        for(int k=0;k<m;k++)
           cin>>map[k];
        int num=0;
        memset(mark,0,sizeof(mark));
        
    
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
            { 
                
               if(map[i][j]=='@'&&mark[i][j]==0)
               {
                  arr[0].x=j;arr[0].y=i;
                   mark[i][j]=1;
                    a=b=0;
                      while(a<=b)
                      {
                          for(int d=0;d<8;d++)
                          {
                                x=arr[a].x+dir[d][0];
                                y=arr[a].y+dir[d][1];
                                if(x>=0&&x<n&&y>=0&&y<m&&map[y][x]=='@'&&mark[y][x]==0)
                                {
                                        b++;
                                        mark[y][x]=1; 
                                        arr[b].x=x;
                                        arr[b].y=y;      
                                }   
                          }
                          a++;      
                      }
                   num++;
               }
            }
            cout<<num<<endl;
       }
    
    献给亲爱的班长同学 !!~(阮同学)初学者 传说中的勘探油田(DFS)
    Problem : 1241 ( Oil Deposits )     Judge Status : Accepted
    RunId : 3708968    Language : C++    Author : zjut11018
    Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
    #include<stdio.h>
    #include<iostream>
    #include<cstring>
    using namespace std;
    char map[100][100];
    int dir[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1},vis[100][100];
    int n,m,ans;
    void DFS(int i,int j)
    {
       vis[i][j]=1;
       for(int k=0;k<8;k++)
       {
           int x=i+dir[k][0];
           int y=j+dir[k][1];
           if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y]&&map[x][y]=='@')
           {
               DFS(x,y);
           }
       }
       return;
    }
    int main()
    {
       while(cin>>n>>m)
       {
           if(!n&&!m)break;
           for(int i=0;i<n;i++)
               scanf("%s",&map[i]);
             ans=0;
           memset(vis,0,sizeof(vis));
           for(int i=0;i<n;i++)
               for(int j=0;j<m;j++)
                   if(!vis[i][j]&&map[i][j]=='@')
                   {
                       ans++;
                       DFS(i,j);
                   }
           printf("%d\n",ans);
       }
    }
    
  • 相关阅读:
    几种常见的Map的区别
    BlockingQueue详解
    Android开发过程中内存泄露检测
    Android studio 技巧设置(持续更新中)
    Android Support兼容包详解
    单例模式的饿汉式为什么需要双重锁定
    View分析
    Activity的启动流程分析
    LeetCode第十四题-字符串数组中最长的共同前缀
    LeetCode第十三题-将罗马数字转化为数字
  • 原文地址:https://www.cnblogs.com/sook/p/1996169.html
Copyright © 2020-2023  润新知