最少建几个储水厂不会写QwQ
查看原帖
最少建几个储水厂不会写QwQ
1264592
IlIlIlIlIl楼主2024/11/12 13:39

完全没思路...

#include<bits/stdc++.h>
#define MAXN 505
#define MAXM 505
struct node{
	int n,m;
};//储存城市坐标 
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};//方向数组 
int n,m,cnt;
int h[MAXN][MAXM];//海拔 
bool vis[MAXN][MAXM];//判断是否已访问 
queue<node>que;
using namespace std;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>h[i][j];
	for(int i=1;i<=m;i++){
		vis[1][i]=1;
		que.push({1,i});
	}//储水站 
	while(!que.empty()){
		node a=que.front();
		int i=a.n,j=a.m;
		for(int k=0;k<4;k++){
			if(i+dx[k]>=1&&i+dx[k]<=n&&j+dy[k]>=1&&j+dy[k]<=m){
				if(h[i][j]>=h[i+dx[k]][j+dy[k]]&&vis[i+dx[k]][j+dy[k]]==0){
					vis[i+dx[k]][j+dy[k]]=1;
					que.push({i+dx[k],j+dy[k]});
				}
			}
		}//bfs判断(i,j)能否建输水站 
		que.pop();
	}
	for(int i=1;i<=m;i++)
		cnt+=vis[n][i];//第n排能否建水利设施 
	if(cnt!=m){
		cout<<m-cnt<<"\n";
		return 0;
	}
	else{
		//计算最少建造几个蓄水厂
		//不会写QwQ 
	}
	return 0;
}
2024/11/12 13:39
加载中...