zoukankan      html  css  js  c++  java
  • ACM题解报告——HD1241

      今天解了杭电OJ1241题,题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241

      题目的大体意思就是找出不同的油田数量并输出,注意相邻的油井都属于同一块油田(ps:它的相邻也包括左上,左下,右上,右下,开始读题目半天都没搞懂这个,囧死了)。

    这题可以用搜索来解决,这里我分别用了深搜和广搜AC了一遍:

    深搜代码:

    #include<iostream>
    using namespace std;
    int map[105][105],m,n;
    int fx[8]={-1,-1,-1,0,0,1,1,1},fy[8]={-1,1,0,1,-1,1,-1,0};
    int check(int a,int b,int k)
    {
      int flag=1;
      a+=fx[k];
      b+=fy[k];
    if(a<1||a>m||b<1||b>n)
      flag=0;
    if(map[a][b]==0)
      flag=0;
     return flag;
    }
    void dfs(int a,int b)
    {
      int i;
      int newx,newy;
      for(i=0;i<8;i++)
    {
      if(check(a,b,i)==1)
    {
      newx=a+fx[i];
      newy=b+fy[i];
      map[newx][newy]=0;
      dfs(newx,newy);
     }
     }
    }
    int main( )
    {
      int i,j;
      char ch;
     while(cin>>m>>n&&(m||n))
    {
    int count=0;
      for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
    {
      cin>>ch;
      if(ch=='@')  map[i][j]=1;
      if(ch=='*')   map[i][j]=0;
     }
      for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
    {
      if(map[i][j])
    {
      count++;
      dfs(i,j);
     }
     }
    cout<<count<<endl;
    }
      return 0;
    }

    广搜代码:

    #include<iostream>
    using namespace std;
    int map[105][105],m,n;
    int fx[8]={-1,-1,-1,0,0,1,1,1},fy[8]={-1,1,0,1,-1,1,-1,0};
    typedef struct 
    {
      int x;
      int y;
    }Node;
    Node node[10005];
    int check(int a,int b,int k)
    {
      int flag=1;
      a+=fx[k];
      b+=fy[k];
    if(a<1||a>m||b<1||b>n)
      flag=0;
    if(map[a][b]==0)
      flag=0;
     return flag;
    }
    void bfs(int a,int b)
    {
      int i,head,tail;
      head=0;
      tail=1;
      node[1].x=a;
      node[1].y=b;
      while( head!=tail)
    {
      head++;
      for(i=0;i<8;i++)
    {
      if(check(node[head].x,node[head].y,i)==1)
    {
      tail++;
      node[tail].x=node[head].x+fx[i];
      node[tail].y=node[head].y+fy[i];
      map[node[tail].x][node[tail].y]=0;
     }
     }
     }
    }
    int main( )
    {
      int i,j;
      char ch;
     while(cin>>m>>n&&(m||n))
    {
    int count=0;
      for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
    {
      cin>>ch;
      if(ch=='@')  map[i][j]=1;
      if(ch=='*')   map[i][j]=0;
     }
      for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
    {
      if(map[i][j])
    {
      count++;
      bfs(i,j);
     }
     }
    cout<<count<<endl;
    }
      return 0;
    }

    思维量不是很大的题目

  • 相关阅读:
    Mybatis学习01:利用mybatis查询数据库
    SpringBoot_登录注册
    python抓取中科院大学招聘
    centos7设置固定IP
    PIL给图片加水印
    You can ignore those files in your build.gradle
    mysql事件执行时间
    wampserver2.5域名解析错误问题
    Mysql错误消息 语言设置
    js控制select多选
  • 原文地址:https://www.cnblogs.com/paradises/p/3100480.html
Copyright © 2011-2022 走看看