牛客寒假算法基础集训营4 C:Applese 走迷宫(bfs)

【题目】

Applese 走迷宫

【题解】

简单搜索

【代码】

#include 
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
char mp[105][105];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int vis[105][105][2]={0};
struct p{
    int x,y,t,c;
}f;
int bfs()
{
    queue 

q; q.push(f); vis[f.x][f.y][f.t]=1; while(!q.empty()) { f=q.front(); q.pop(); char ch=mp[f.x][f.y]; if(ch=='T') return f.c; else { if(ch=='@') { p ff ={f.x,f.y,!f.t,f.c+1}; if(!vis[ff.x][ff.y][ff.t]) { q.push(ff); vis[ff.x][ff.y][ff.t]=1; } } for(int i=0;i<4;i++) { p ff={f.x+dx[i],f.y+dy[i],f.t,f.c+1}; ch=mp[ff.x][ff.y]; if(ch!='#'&&!vis[ff.x][ff.y][ff.t]) { if((ch=='w'&&!ff.t)||(ch=='~'&&ff.t)) continue; else { q.push(ff); vis[ff.x][ff.y][ff.t]=1; } } } } } return -1; } int main() { mem(mp,'#'); int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf(" %c",&mp[i][j]); if(mp[i][j]=='S') { f.x=i,f.y=j,f.t=0,f.c=0; } } } printf("%d\n",bfs()); return 0; }

 

你可能感兴趣的:(牛客寒假算法基础集训营4 C:Applese 走迷宫(bfs))