比较简单的一道bfs搜索题,注意细节就好
每次记录小球左上角,然后判断能不能进行下一步即可
#include<bits/stdc++.h>
using namespace std;
const int maxn=59;
int mapp[maxn][maxn];
bool vis[maxn][maxn][9];
int step[maxn][maxn][9];
//0,1,2,3上下左右;
int dx_n[5]={-1,-2,-3,0,0};
int dy_n[5]={0,0,0,0,0};
int dz_n[5]={0,0,0,2,3};
int dx_s[5]={1,2,3,0,0};
int dy_s[5]={0,0,0,0,0};
int dz_s[5]={1,1,1,3,2};
int dx_w[5]={0,0,0,0,0};
int dy_w[5]={-1,-2,-3,0,0};
int dz_w[5]={2,2,2,1,0};
int dx_e[5]={0,0,0,0,0};
int dy_e[5]={1,2,3,0,0};
int dz_e[5]={3,3,3,0,1};
int dx[4]={0,0,1,1};
int dy[4]={0,1,0,1};
int n,m;
bool cango(int x,int y){
for(int i=0;i<4;++i){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&mapp[xx][yy]==0){}
else return 0;
}
return 1;
}
bool check(int x,int y,int z){
if(x>=0&&x<n&&y>=0&&y<m&&mapp[x][y]==0)
if(cango(x,y)) return 1;
return 0;
}
struct Node{
int x,y,z;
}in,out,st,en;
queue<Node> q;
void bfs(){
q.push(st);
vis[st.x][st.y][st.z]=1;
while(!q.empty()){
out=q.front(); q.pop();
if(