···水题AC场···
好奇怪的游戏
https://www.luogu.com.cn/problem/P1747
#include <bits/stdc++.h> using namespace std; const int N=30; int d[N][N]; bool v[N][N]; int dx[12]={1,2,2,1,-1,-2,-2,-1,2,2,-2,-2}; int dy[12]={2,1,-1,-2,-2,-1,1,2,2,-2,-2,2}; int main() { int x1,y1; cin>>x1>>y1; queue<pair<int,int> >q; q.push(make_pair(x1,y1)); while(q.size()){ pair<int,int>now=q.front(); // cout<<now.first<<" "<<now.second<<endl; q.pop(); for(int k=0;k<12;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx>=1&&nx<=20&&ny>=1&&ny<=20&&!v[nx][ny]){ v[nx][ny]=1; d[nx][ny]=d[now.first][now.second]+1; q.push(make_pair(nx,ny)); } } } cout<<d[1][1]<<endl; memset(d,0,sizeof(d)); memset(v,0,sizeof(v)); int x2,y2; cin>>x2>>y2; q.push(make_pair(x2,y2)); while(q.size()){ pair<int,int>now=q.front(); q.pop(); for(int k=0;k<12;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx>=1&&nx<=20&&ny>=1&&ny<=20&&!v[nx][ny]){ v[nx][ny]=1; d[nx][ny]=d[now.first][now.second]+1; q.push(make_pair(nx,ny)); } } } cout<<d[1][1]; return 0; }
离开中山路
https://www.luogu.com.cn/problem/P1746
#include <bits/stdc++.h> using namespace std; const int N=1010; char g[N][N]; int d[N][N]; bool v[N][N]; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; int main() { int n; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>g[i][j]; int x1,y1,x2,y2; cin>>x1>>y1>>x2>>y2; queue<pair<int,int> >q; q.push(make_pair(x1,y1)); v[x1][y1]=1; while(q.size()){ pair<int,int>now=q.front(); // cout<<now.first<<" "<<now.second<<endl; q.pop(); v[now.first][now.second]=1; for(int k=0;k<4;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx==x2&&ny==y2){ d[nx][ny]=d[now.first][now.second]+1; cout<<d[x2][y2]<<endl; return 0; } if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&!v[nx][ny]&&g[nx][ny]!='1'){ v[nx][ny]=1; d[nx][ny]=d[now.first][now.second]+1; q.push(make_pair(nx,ny)); } } } cout<<"-1"<<endl; return 0; }
Mzc和男家丁的游戏
https://www.luogu.com.cn/problem/P2298
#include <bits/stdc++.h> using namespace std; const int N=2010; char g[N][N]; int d[N][N]; bool v[N][N]; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; int main() { int n,m,sx,sy,gx,gy; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>g[i][j]; if(g[i][j]=='m'){ sx=i; sy=j; } else if(g[i][j]=='d'){ gx=i; gy=j; } } } queue<pair<int,int> >q; q.push(make_pair(sx,sy)); v[sx][sy]=1; while(q.size()){ pair<int,int>now=q.front(); // cout<<now.first<<" "<<now.second<<endl; q.pop(); v[now.first][now.second]=1; for(int k=0;k<4;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx==gx&&ny==gy){ d[nx][ny]=d[now.first][now.second]+1; cout<<d[gx][gy]<<endl; return 0; } if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!v[nx][ny]&&g[nx][ny]!='#'){ v[nx][ny]=1; d[nx][ny]=d[now.first][now.second]+1; q.push(make_pair(nx,ny)); } } } cout<<"No Way!"<<endl; return 0; }
血色先锋队
https://www.luogu.com.cn/problem/P1332
#include <bits/stdc++.h> using namespace std; const int N=505; int n,m,a,b; int d[N][N]; bool v[N][N]; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; int main() { queue<pair<int,int> >q; cin>>n>>m>>a>>b; for(int i=1;i<=a;i++){ int x,y; cin>>x>>y; q.push(make_pair(x,y)); v[x][y]=1; } pair<int,int> bp[b+1]; for(int i=1;i<=b;i++) cin>>bp[i].first>>bp[i].second; while(q.size()){ pair<int,int> now=q.front();q.pop(); for(int k=0;k<4;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!v[nx][ny]){ d[nx][ny]=d[now.first][now.second]+1; q.push(make_pair(nx,ny)); v[nx][ny]=1; } } } for(int i=1;i<=b;i++) cout<<d[bp[i].first][bp[i].second]<<endl; return 0; }
求细胞数量
https://www.luogu.com.cn/problem/P1451
#include <bits/stdc++.h> using namespace std; const int N=110; int n,m,res; char g[N][N]; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; void bfs(int x,int y){ g[x][y]='0'; queue<pair<int,int> >q; q.push(make_pair(x,y)); while(q.size()){ pair<int,int>now=q.front();q.pop(); for(int k=0;k<4;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&g[nx][ny]!='0'){ g[nx][ny]='0'; q.push(make_pair(nx,ny)); } } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>g[i][j]; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(g[i][j]>='1'&&g[i][j]<='9'){ bfs(i,j); res++; } } } cout<<res; return 0; }
[USACO19JAN]Icy Perimeter S
https://www.luogu.com.cn/problem/P5198
#include <bits/stdc++.h> using namespace std; const int N=1010; char g[N][N]; bool v[N][N]; int anss=1,ansc,n; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; void bfs(int i,int j){ int nows=1,nowc=0; for(int k=0;k<4;k++){ int nx=i+dx[k]; int ny=j+dy[k]; if(g[nx][ny]=='.') nowc++; } queue<pair<int,int> >q; q.push(make_pair(i,j)); v[i][j]=1; while(q.size()){ pair<int,int> now=q.front();q.pop(); for(int k=0;k<4;k++){ int nx=now.first+dx[k]; int ny=now.second+dy[k]; if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&!v[nx][ny]&&g[nx][ny]=='#'){ v[nx][ny]=1; nows++; for(int t=0;t<4;t++){ int nnx=nx+dx[t]; int nny=ny+dy[t]; if(g[nnx][nny]=='.') nowc++; } q.push(make_pair(nx,ny)); } } } if(nows>=anss){ anss=nows; ansc=nowc; } else if(nows==anss){ ansc=max(ansc,nowc); } } void work(){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(!v[i][j]&&g[i][j]=='#') bfs(i,j); } } } int main() { cin>>n; for(int i=0;i<=n+1;i++) for(int j=0;j<=n+1;j++) g[i][j]='.'; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>g[i][j]; /*for(int i=0;i<=n+1;i++){ for(int j=0;j<=n+1;j++){ cout<<g[i][j]; } cout<<endl; }*/ work(); cout<<anss<<" "<<ansc; return 0; }