1 条题解
-
0
C++ :
#include<stdio.h> #include<string.h> #include<algorithm> #include<queue> #include<iostream> using namespace std; struct P { int x,y; int time; }; bool map[15][15][4]; char a[15][15]; bool vis[15][15][4]; int x[4]={1,0,-1,0}; int y[4]={0,1,0,-1}; int n,m; int bfs(P s,P e) { queue<P> q; q.push(s); vis[s.x][s.y][s.time]=1; bool flag=0; while(!q.empty()) { P p=q.front(); q.pop(); //printf("%d-%d-%d\n",p.x,p.y,p.time); if(p.x==e.x&&p.y==e.y) return p.time; for(int i=0;i<4;i++) { int nx=p.x+x[i]; int ny=p.y+y[i]; if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny][(p.time+1)%4]&&!map[nx][ny][(p.time+1)%4]) { vis[nx][ny][(p.time+1)%4]=1; P p1; p1.x=nx;p1.y=ny;p1.time=p.time+1; q.push(p1); } } int time=p.time+1; if(!map[p.x][p.y][(time)%4]&&!vis[p.x][p.y][(time)%4]) { p.time++; q.push(p); } } return -1; } int main() { //freopen("F input.txt","r",stdin); //freopen("F output.txt","w",stdout); while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) scanf("%s",a[i]); P s,e; memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(a[i][j]=='S') { s.x=i; s.y=j; s.time=0; } else if(a[i][j]=='E') { e.x=i; e.y=j; } else if(a[i][j]=='D') { map[i][j][0]=1; map[i-1][j][1]=1; map[i-1][j+1][2]=1; map[i][j+1][3]=1; } } } int k=0; k=bfs(s,e); if(k!=-1) printf("%d\n",k); else printf("kill the dog,god wen!\n"); } }
- 1
信息
- ID
- 1353
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者