U311289 矩阵距离 - 洛谷#include bits/stdc.h using namespace std; typedef pairint,int PII; const int N 1e3 10; int n,m; int dx[] {1,-1,0,0}; int dy[] {0,0,-1,1}; char a[N][N]; int dist[N][N]; void bfs() { queuePII q; memset(dist,-1,sizeof dist); for(int i 1;i n;i) { for(int j 1;j m;j) { if(a[i][j]1) { dist[i][j] 0; q.push({i,j}); } } } while(q.size()) { auto t q.front();q.pop(); int i t.first,j t.second; for(int k 0;k 4;k) { int nx i dx[k],ny j dy[k]; if(nx 1|| nx n || ny 1|| ny m) continue; if(dist[nx][ny]!-1) continue; dist[nx][ny] dist[i][j] 1; q.push({nx,ny}); } } } int main() { cin n m; for(int i 1;i n;i) { for(int j 1;j m;j) { cin a[i][j]; } } bfs(); for(int i 1;i n;i) { for(int j 1;j m;j) { cout dist[i][j] ; } cout endl; } return 0; }P1596 [USACO10OCT] Lake Counting S - 洛谷#include bits/stdc.h using namespace std; const int N 105; char a[N][N]; bool st[N][N]; int dx[] {0,0,1,-1,1,-1,1,-1}; int dy[] {-1,1,0,0,1,-1,-1,1}; int n,m,ret; void dfs(int x,int y) { st[x][y] true; for(int k 0;k 8;k) { int nx x dx[k]; int ny y dy[k]; if(x1xny1yma[nx][ny]Wst[nx][ny]false) { dfs(nx,ny); } } } 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]Wst[i][j]false) { ret; dfs(i,j); } } } cout ret; return 0; }P1162 填涂颜色 - 洛谷#include bits/stdc.h using namespace std; const int N 35; int a[N][N]; bool st[N][N]; int dx[] {0,0,1,-1}; int dy[] {1,-1,0,0}; int n; void dfs(int x,int y) { st[x][y] true; //改 for(int k 0;k 4;k) { int nx x dx[k]; int ny y dy[k]; if(nx0nxn1ny0nyn1a[nx][ny]0st[nx][ny]false){ dfs(nx,ny); } } } int main() { cin n; for(int i 1;i n;i) { for(int j 1;j n;j) { cin a[i][j]; } } dfs(0,0); for(int i 1;i n;i) { for(int j 1;j n;j) { if(a[i][j]) cout a[i][j] ; else if(st[i][j]) cout 0 ; else cout 2 ; } cout endl; } return 0; }
蓝桥杯竞赛
U311289 矩阵距离 - 洛谷#include bits/stdc.h using namespace std; typedef pairint,int PII; const int N 1e3 10; int n,m; int dx[] {1,-1,0,0}; int dy[] {0,0,-1,1}; char a[N][N]; int dist[N][N]; void bfs() { queuePII q; memset(dist,-1,sizeof dist); for(int i 1;i n;i) { for(int j 1;j m;j) { if(a[i][j]1) { dist[i][j] 0; q.push({i,j}); } } } while(q.size()) { auto t q.front();q.pop(); int i t.first,j t.second; for(int k 0;k 4;k) { int nx i dx[k],ny j dy[k]; if(nx 1|| nx n || ny 1|| ny m) continue; if(dist[nx][ny]!-1) continue; dist[nx][ny] dist[i][j] 1; q.push({nx,ny}); } } } int main() { cin n m; for(int i 1;i n;i) { for(int j 1;j m;j) { cin a[i][j]; } } bfs(); for(int i 1;i n;i) { for(int j 1;j m;j) { cout dist[i][j] ; } cout endl; } return 0; }P1596 [USACO10OCT] Lake Counting S - 洛谷#include bits/stdc.h using namespace std; const int N 105; char a[N][N]; bool st[N][N]; int dx[] {0,0,1,-1,1,-1,1,-1}; int dy[] {-1,1,0,0,1,-1,-1,1}; int n,m,ret; void dfs(int x,int y) { st[x][y] true; for(int k 0;k 8;k) { int nx x dx[k]; int ny y dy[k]; if(x1xny1yma[nx][ny]Wst[nx][ny]false) { dfs(nx,ny); } } } 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]Wst[i][j]false) { ret; dfs(i,j); } } } cout ret; return 0; }P1162 填涂颜色 - 洛谷#include bits/stdc.h using namespace std; const int N 35; int a[N][N]; bool st[N][N]; int dx[] {0,0,1,-1}; int dy[] {1,-1,0,0}; int n; void dfs(int x,int y) { st[x][y] true; //改 for(int k 0;k 4;k) { int nx x dx[k]; int ny y dy[k]; if(nx0nxn1ny0nyn1a[nx][ny]0st[nx][ny]false){ dfs(nx,ny); } } } int main() { cin n; for(int i 1;i n;i) { for(int j 1;j n;j) { cin a[i][j]; } } dfs(0,0); for(int i 1;i n;i) { for(int j 1;j n;j) { if(a[i][j]) cout a[i][j] ; else if(st[i][j]) cout 0 ; else cout 2 ; } cout endl; } return 0; }