20分求助(玄关)
查看原帖
20分求助(玄关)
991435
wcy20120222楼主2025/1/17 15:12
#include<bits/stdc++.h>
using namespace std;
int n,m;
char arr[201][201];
int f[201][201],s[201][201]={0};
void dfs(int x,int y,int x1,int y1){
    if(s[x][y]==0){
        if(arr[x][y]=='1'&&x>0&&x<=n&&y>0&&y<=m){
            f[x1][y1]=abs(x1-x)+abs(y1-y);
//            cout<<x1<<" "<<y1<<" "<<abs(x1-x)<<" "<<abs(y1-y)<<endl;
            return ;
        }else if(x<=0||x>n||y<=0||y>m){
            return ;
        }else{
            s[x][y]=1;
            dfs(x-1,y,x1,y1);
            dfs(x+1,y,x1,y1);
            dfs(x,y-1,x1,y1);
            dfs(x,y+1,x1,y1);
        }
    }else{
        return ;
    }
}
void sum(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			s[i][j]=0;
		}
	}
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>arr[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            sum();
            dfs(i,j,i,j);
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cout<<f[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

萌新Orz

2025/1/17 15:12
加载中...