丰收

 

解法一:深搜  会超时

#include <stdio.h>  
#include <iostream>  
#include <algorithm> 
#include <math.h>  
#include <map> 
#include <string>  
using namespace std;
int a[1001][1001];
int vis[1001][1001];
int n,m;
int ct;
int dir[8]={-1,1,0,0,0,0,1,-1};
void dfs(int r,int c,int val)
{
    int ti,tj,k;
    if(vis[r][c]==0 || a[r][c]<=val)
        return;
    else if(r<0 || r>=n || c<0 || c>=m)
        return;
    else if(vis[r][c]==1 && a[r][c]>val)
    {    
            vis[r][c]=0;
            ct--;
                dfs(r-1,c,val);
                dfs(r+1,c,val);
                dfs(r,c-1,val);
                dfs(r,c+1,val);
    }
}
int main()
{
    int q,i,j,k,h=0,val;
    scanf("%d %d",&n,&m);
    ct = n*m;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[i][j]);
            vis[i][j] = 1;
        }
    scanf("%d",&q);
    for(k=0;k<q;k++)
    {
        h=0;
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                vis[i][j] = 1;
        if(ct ==0)
        {
            for(k;k<q;k++)
            {
                scanf("%d",&val);
                printf("0\n");
            }    
            break;    
        } 
        scanf("%d",&val);
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
            {
                if(a[i][j]>val && vis[i][j]==1)
                {
                    dfs(i,j,val);
                    h++;
                }
            }
        printf("%d\n",h);
    }
    return 0;
}

 

posted @ 2017-12-17 02:47  萌新上路  阅读(130)  评论(0)    收藏  举报