题解
【提高】泉水
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n,m,p1,p2; int a[1001][1001];//存储地图每个格子的高度 bool f[1001][1001];//标记每个格子是否被水淹没 int q[1000001][3];//储存走过的点 int t=1,w=1; int fx[5]={0,0,1,0,-1}; int fy[5]={0,1,0,-1,0}; int main(){ cin>>n>>m>>p1>>p2; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j];// 读取地图每个格子的高度 } } //记录泉眼的位置 q[1][1]=p1; q[1][2]=p2; f[p1][p2]=true;//记录标记过 while(t<=w){ // 更新四个方向 for(int i=1;i<=4;i++){ int tx=q[t][1]+fx[i]; int ty=q[t][2]+fy[i]; // 判断新位置是否满足以下条件: // 1. 在地图范围内(tx>=1 && tx<=n && ty>=1 && ty<=m) // 2. 未被访问过(f[tx][ty]==false) // 3. 高度不超过泉眼高度(a[tx][ty]<=a[p1][p2]) if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&f[tx][ty]==false&&a[tx][ty]<=a[p1][p2]){ w++; //更新标记的点 q[w][1]=tx; q[w][2]=ty; f[tx][ty]=true; // 标记为已访问 } } t++; //继续判断下一个头分支 } cout<<w; }
- 1