2 条题解
-
0
//t1 #include<bits/stdc++.h> using namespace std; const int N=1e3+10; int n,m,ans,s[N][N]; bool ff[N][N],f[N][N],t[N][N]; char a[N][N]; int dx[15]={0,-1,0,0,1}; int dy[15]={0,0,-1,1,0}; void DFS_FindGround(int x,int y) { if(f[x][y]==1)return; ans++; f[x][y]=1; for(int i=1;i<=4;++i) { int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=1&&yy>=1&&xx<=n&&yy<=m && a[xx][yy]=='_') { DFS_FindGround(xx,yy); } } return; } void DFS(int x,int y) { if(ff[x][y]==1)return; ff[x][y]=1; for(int i=1;i<=4;++i) { int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=1&&yy>=1&&xx<=n&&yy<=m) { if(t[xx][yy]==0 && a[xx][yy]=='W') t[xx][yy]=1,s[xx][yy]+=ans; else if(a[xx][yy]=='_') DFS(xx,yy); } } return; } 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<=n;++i) { for(int j=1;j<=m;++j) { if(a[i][j]=='_' && f[i][j]==0) { ans=0; DFS_FindGround(i,j); memset(ff,0,sizeof(ff)); memset(t,0,sizeof(t)); DFS(i,j); } } } for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { if(a[i][j]=='_')printf("_"); else printf("%d",(s[i][j]+1)%10); } printf("\n"); } return 0; }
- 1
信息
- ID
- 3088
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 67
- 已通过
- 17
- 上传者