本文共 1456 字,大约阅读时间需要 4 分钟。
【题目】
【题解】
简单搜索
【代码】
#includeusing 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;}
转载地址:http://jfben.baihongyu.com/