丰收

解法一:深搜 会超时
#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; }
浙公网安备 33010602011771号