两天写一次吧,监督监督
今日战果哈哈哈,太垃圾了,只做了五道
题目详情 - 【提高】奶牛和草丛
题解:
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mp[300][300];
int vis[300][300];
int ans=0;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
bool check(int x,int y){
if(x>0&&y>0&&x<=n&&y<=m&&!vis[x][y]&&mp[x][y]=='#'){
return true ;
}
else return false;
}
void dfs(int x,int y){
if(vis[x][y]) return ;
vis[x][y]=1;
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(check(nx,ny)){
dfs(nx,ny);
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mp[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(mp[i][j]=='#'&&!vis[i][j]){
dfs(i,j);
ans++;
}
}
}
cout<<ans;
return 0;
}
题目详情 - 【基础】走出迷宫的最少步数
题解:
#include <bits/stdc++.h>
using namespace std;
int n,m,step;
char mp[300][300];
int vis[300][300];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct node{
int x,y,step;
};
bool check(int x,int y){
if(x>0&&y>0&&x<=n&&y<=m&&!vis[x][y]&&mp[x][y]=='.'){
return true ;
}
return false;
}
int bfs(){
queue<node>q;
q.push({1,1,1});
while(!q.empty()){
node p=q.front();
q.pop();
if(p.x==n&&p.y==m){
return p.step;
}
if(vis[p.x][p.y]) continue;
vis[p.x][p.y]=1;
for(int i=0;i<4;i++){
int nx=p.x+dx[i];
int ny=p.y+dy[i];
if(check(nx,ny)){
q.push({nx,ny,p.step+1});
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
cout<<bfs();
return 0;
}
题目详情 - 【基础】走出迷宫的最少步数2
题解
#include <bits/stdc++.h>
using namespace std;
const int N=50;
char mp[N][N];
int vis[N][N];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
struct NODE{
int x,y,step;
};
int bfs(int n,int m){
queue<NODE>q;
for (int i=0; i<n; i++) {
for (int j=0; j<m;j++) {
if (mp[i][j] == 'S') {
vis[i][j] = 1;
q.push({i, j, 0});
break;
}
}
}
while(!q.empty()){
NODE p=q.front();
q.pop();
if(mp[p.x][p.y ]=='T') return p.step;
for(int i=0;i<4;i++){
int nx=p.x+dx[i];
int ny=p.y+dy[i];
if(nx >= 0 && ny >= 0 && nx <n && ny < m && !vis[nx][ny] && mp[nx][ny] != '#'){
q.push({nx,ny,p.step+1});
vis[nx][ny]=1;
}
}
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mp[i][j];
}
}
cout<<bfs(n,m);
return 0;
}