帅气的HYC迷路了 QDU
2017-07-29 13:55
351 查看
点击打开链接
这个题主要是第一问 要按照要求的规则走到目的地
刚接触搜索算法没多久时做了这道题 当时感觉很懵逼 模拟第一问过程的思路都是错的
现在再看这个题.. 还是有一些小细节需要注意
先DFS模拟第一问过程 注意不可用传参方式记录路长 因为折返时额外走的弯路也要计算在内
最后BFS求最短路程即可
这个题主要是第一问 要按照要求的规则走到目的地
刚接触搜索算法没多久时做了这道题 当时感觉很懵逼 模拟第一问过程的思路都是错的
现在再看这个题.. 还是有一些小细节需要注意
先DFS模拟第一问过程 注意不可用传参方式记录路长 因为折返时额外走的弯路也要计算在内
最后BFS求最短路程即可
#include <stdio.h> struct node { int x; int y; int s; }; struct node que[1601]; int book[40][40]; int n,m,sx,sy,px,py,flag,step,ans1; int head,tail,ans2; char map[40][41]; void init(); void dfs(int x,int y,int last); void bfs(); int main() { int i,j,t; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); for(i=0;i<n;i++) { scanf("%s",map[i]); } for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(map[i][j]=='S') { sx=i,sy=j; } if(map[i][j]=='E') { px=i,py=j; } } } flag=0,step=0; dfs(sx,sy,3); init(); bfs(); printf("%d %d\n",ans1,ans2); } return 0; } void init() { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) { book[i][j]=0; } } return; } void dfs(int x,int y,int last)// { int next[4][2]={0,-1,-1,0,0,1,1,0}; int tx,ty,i,j,s; if(x==px&&y==py) { flag=1; ans1=step+1; return; } s=last-1; if(s<0) s+=4; for(i=s,j=0;j<4;i++,j++) { tx=x+next[i%4][0]; ty=y+next[i%4][1]; if(tx<0||tx>=n||ty<0||ty>=m||map[tx][ty]=='#') { continue; } step++; dfs(tx,ty,i); if(flag==1) return; } return; } void bfs() { struct node cur; int next[4][2]={0,-1,-1,0,0,1,1,0}; int tx,ty,i; head=1,tail=0; tail++; que[tail].x=sx; que[tail].y=sy; que[tail].s=0; book[sx][sy]=1; while(head<=tail) { cur=que[head]; for(i=0;i<4;i++) { tx=cur.x+next[i][0]; ty=cur.y+next[i][1]; if(tx<0||tx>=n||ty<0||ty>=m||map[tx][ty]=='#'||book[tx][ty]==1) { continue; } tail++; que[tail].x=tx; que[tail].y=ty; que[tail].s=cur.s+1; book[tx][ty]=1; if(tx==px&&ty==py) { ans2=que[tail].s+1; return; } } head++; } return; }
相关文章推荐
- QDU 帅气的HYC迷路了(简单搜索+小小模拟)
- QDU-帅气的HYC与N皇后(最大独立集)
- qduoj 帅气的HYC迷路了
- 此题请去QDU找帅气的HYC与露珠
- 帅气的HYC迷路了(带方向)
- 帅气的HYC迷路了
- QDU 帅气的HYC求乘积
- qduoj31 帅气的HYC切蛋糕
- 帅气的HYC的珍珠
- QDUOJ 37 帅气的HYC的珍珠(树状数组)
- qduoj 帅气的HYC的珍珠(树状数组)
- QDUOJ 29 帅气的HYC与N皇后(最大独立集)
- qduoj 帅气的HYC的珍珠 (树状数组)
- qduoj 30 帅气的HYC求乘积(dfs)
- qduoj 帅气的HYC与冰淇淋
- qduoj 帅气的HYC求乘积 dp//蓝桥算法训练 乘积最大
- QDUOJ 29 帅气的HYC与N皇后 (最大独立集)
- qduoj 帅气的HYC切蛋糕
- qduoj 31 帅气的HYC 切蛋糕
- 帅气的HYC切蛋糕