top1编程
← 返回题目
题解

【提高】泉水

1 条题解

  • 0
    @ 2026-7-28 22:09:23
    #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