1 solutions
-
1
复杂,思维简单的bfs
#include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; struct nod { int x,y; }; const int NR=1001,X[]={-1,-1,0,1,1,1,0,-1},Y[]={0,1,1,1,0,-1,-1,-1}; bool vis[NR][NR]; int n,h[NR][NR]; bool w1=1;//山峰 bool w2=1;//山谷 void bfs(int x,int y) { queue<nod> q; q.push({x,y}); vis[x][y]=true; while(!q.empty()) { int sx=q.front().x,sy=q.front().y,i; q.pop(); for(i=0;i<=7;i++) { int tx=sx+X[i],ty=sy+Y[i]; if(tx<1 || tx>n || ty<1 || ty>n) continue; if(h[sx][sy]<h[tx][ty]) { w1=0;//不可能是山峰 continue; } if(h[sx][sy]>h[tx][ty]) { w2=0;//不可能是山谷 continue; } if(vis[tx][ty]) continue; vis[tx][ty]=true; q.push({tx,ty}); } } return; } int main() { cin>>n; int i,j,ans1=0,ans2=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>h[i][j]; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(!vis[i][j]) { bfs(i,j); ans1+=w1; ans2+=w2; w1=1; w2=1; } cout<<ans1<<" "<<ans2; return 0; }
- 1
Information
- ID
- 2516
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 4
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By