题解
2024-01-31 16:45:49
发布于:广东
20阅读
0回复
0点赞
方法一,稍微会有残留
#include<bits/stdc++.h>
using namespace std;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int a[1002][1002],m,n;
bool vis[1050][1050];
bool vis1[1050][1050];
struct node{
int x,y;
};
queue<node>q;
void bfs(queue<node>q,bool vis[1050][1050]){
while(!q.empty()){
node tmp=q.front();
q.pop();
for(int i=0;i<4;i++){
int tx=tmp.x+dx[i];
int ty=tmp.y+dy[i];
if(tx<1||tx>n||ty<1||ty>m)continue;
if(vis[tx][ty])continue;
if(a[tx][ty]<a[tmp.x][tmp.y])continue;
vis[tx][ty]=true;
q.push(node{tx,ty});
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=m;i++){
q.push(node{1,i});
vis[1][i]=true;
}
for(int i=1;i<=n;i++){
q.push(node{i,1});
vis[i][1]=true;
}
bfs(q,vis);
while(q.size()){
q.pop();
}
for(int i=1;i<=m;i++){
q.push(node{n,i});
vis1[n][i]=true;
}
for(int i=1;i<=n;i++){
q.push(node{i,m});
vis1[i][m]=true;
}
bfs(q,vis1);
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(vis[i][j]&&vis1[i][j]){
cnt++;
}
}
}
cout<<cnt;
return 0;
}
第二方法解决了第一种方法的残留#include<bits/stdc++.h>
using namespace std;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int a[1002][1002],m,n;
bool vis[1050][1050];
bool vis1[1050][1050];
struct node{
int x,y;
};
queue<node>q;
void bfs(queue<node>&q,bool vis[1050][1050]){
while(!q.empty()){
node tmp=q.front();
q.pop();
for(int i=0;i<4;i++){
int tx=tmp.x+dx[i];
int ty=tmp.y+dy[i];
if(tx<1||tx>n||ty<1||ty>m)continue;
if(vis[tx][ty])continue;
if(a[tx][ty]<a[tmp.x][tmp.y])continue;
vis[tx][ty]=true;
q.push(node{tx,ty});
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=m;i++){
q.push(node{1,i});
vis[1][i]=true;
}
for(int i=1;i<=n;i++){
q.push(node{i,1});
vis[i][1]=true;
}
bfs(q,vis);
for(int i=1;i<=m;i++){
q.push(node{n,i});
vis1[n][i]=true;
}
for(int i=1;i<=n;i++){
q.push(node{i,m});
vis1[i][m]=true;
}
bfs(q,vis1);
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(vis[i][j]&&vis1[i][j]){
cnt++;
}
}
}
cout<<cnt;
return 0;
}
这里空空如也
有帮助,赞一个