迷宫出口
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[100][100];
bool b[100][100];
int n;
struct point{
int x,y;
point(){};
point(int a,int b){
x=a;
y=b;
}
};
point que[10000];
int head=0;
int tail=0;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
int qdx;
int qdy;
int zdx;
int zdy;
cin>>qdx>>qdy>>zdx>>zdy;
b[qdx][qdy]=1;
que[++tail]={qdx,qdy};
while(head<tail){
head++;
for(int i=0;i<4;i++){
int tx=que[head].x+dx[i];
int ty=que[head].y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&b[tx][ty]==1){
b[tx][ty]=1;
que[++tail]={tx,ty};
}
}
}
if(b[zdx][zdy]==1){
cout<<"YES";
}
else cout<<"NO";
return 0;
}
数池塘(四方向)
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
char a[100][100];
int n,m;
struct node{
int x,y;
node(){x=0,y=0;}
node(int a,int b){
x=a;
y=b;
}
};
node que[10000];
int head=0;
int tail=0;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void dfs(int x,int y);
bool ifi(int x,int y);
int cnt=0;
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]=='W'){
cnt++;
dfs(i,j);
}
}
}
cout<<cnt;
return 0;
}
void dfs(int x,int y){
int head=0,tail=0;
que[++tail]={x,y};
while(head<tail){
head++;
for(int i=0;i<4;i++){
int tx=que[head].x+dx[i];
int ty=que[head].y+dy[i];
if(ifi(tx,ty)==true&&a[tx][ty]=='W'){
a[tx][ty]='.';
que[++tail]={tx,ty};
}
}
}
}
bool ifi(int x,int y){
if(x>=1&&x<=n&&y>=1&&y<=m){
return true;
}
else return false;
}
走出迷宫的最少步数2
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
char a[100][100];
bool b[100][100];
int n,m;
struct point{
int x,y;
point(){};
point(int a,int b){
x=a;
y=b;
}
};
point que[10000];
int head=0;
int tail=0;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int cnt=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='S'){
b[i][j]=1;
que[++tail]={i,j};
}
}
}
while(head<tail){
head++;
for(int i=0;i<4;i++){
int tx=que[head].x+dx[i];
int ty=que[head].y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&b[tx][ty]==1&&a[tx][ty]!='#'){
b[tx][ty]=1;
cnt++;
que[++tail]={tx,ty};
}
}
}
cout<<cnt;
return 0;
}
最 小 拐 弯 路 径
小X学游泳
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
char a[100][100];
bool b[100][100];
int n,m;
struct node{
int x,y;
node(){x=0,y=0;}
node(int a,int b){
x=a;
y=b;
}
};
node que[10000];
int head=0;
int tail=0;
int ma=-1;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void dfs(int x,int y);
bool ifi(int x,int y);
int cnt=1;
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++){
dfs(i,j);
}
}
cout<<ma;
return 0;
}
void dfs(int x,int y){
int head=0,tail=0;
que[++tail]={x,y};
b[x][y]=1;
while(head<tail){
head++;
for(int i=0;i<4;i++){
int tx=que[head].x+dx[i];
int ty=que[head].y+dy[i];
if(x>=1&&x<=n&&y>=1&&y<=m&&a[tx][ty]==a[x][y]&&b[tx][ty]==0){
b[tx][ty]=1;
que[++tail]={tx,ty};
cnt++;
}
}
}
ma=max(ma,cnt);
cnt=0;
}
bool ifi(int x,int y){
if(x>=1&&x<=n&&y>=1&&y<=m){
return true;
}
else return false;
}
0 1 迷宫
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
char a[100][100];
bool b[100][100];
int n,m;
struct node{
int x,y,v;
node(){x=0,y=0,v=0;}
node(int a,int b,int c){
x=a;
y=b;
v=c;
}
};
node que[10000];
int head=0;
int tail=0;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int dfs(int x,int y);
bool ifi(int x,int y);
int cnt=0;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int ma=-1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==0){
ma=max(ma,dfs(i,j));
}
}
}
cout<<ma;
return 0;
}
int dfs(int x,int y){
int head=0,tail=0;
que[++tail]={x,y,a[x][y]};
int cnt=0;
while(head<tail){
head++;
for(int i=0;i<4;i++){
int tx=que[head].x+dx[i];
int ty=que[head].y+dy[i];
if(ifi(tx,ty)==true&&a[tx][ty]!=que[head].v&&b[tx][ty]==0){
que[++tail]={tx,ty,a[tx][ty]};
cnt++;
b[tx][ty]=1;
return cnt;
}
}
}
}
bool ifi(int x,int y){
if(x>=1&&x<=n&&y>=1&&y<=m){
return true;
}
else return false;
}