zoukankan      html  css  js  c++  java
  • 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);
       }
    }
    
  • 相关阅读:
    短文本理解蓝图
    BERT在工业界落地的常用三步
    C#:面试相关问题集
    Delphi线程简介Create及其参数、Resume、Suspend和Terminate(转载)
    迭代器模式(学习笔记19)
    备忘录模式(学习笔记21)
    GPS中地面航向角,磁偏角
    访问者模式(学习笔记20)
    easyui:初始化失败的问题
    访问者模式(学习笔记22)
  • 原文地址:https://www.cnblogs.com/sook/p/1996169.html
Copyright © 2011-2022 走看看