HDU 3713 Double Maze
2012-02-01 00:28
288 查看
http://acm.hdu.edu.cn/showproblem.php?pid=3713
BFS
我的代码
BFS
我的代码
#include <stdio.h> #include <string.h> const int N=10000; const int dx[4]={0,1,0,-1}; const int dy[4]={-1,0,1,0}; const char dd[5]="LDRU"; int maze1[10][10],maze2[10][10]; int vis ,dir ,fa ,q ,dir2 ; int bfs(int x1,int y1,int x2,int y2) { memset(q,0,sizeof(0)); int u=x1*1000+y1*100+x2*10+y2; vis[u]=1; fa[u]=0; int front=0,rear=1; q[1]=u; while (front<rear) { u=q[++front]; x1=u/1000; y1=u/100%10; x2=u/10%10; y2=u%10; if (((maze1[x1][y1]&maze2[x2][y2])>>6)&1) return u; int d2,d,nx1,ny1,nx2,ny2; const int dd[4]={1,0,2,3}; for (d2=0;d2<4;d2++) { d=dd[d2]; nx1=x1; ny1=y1; if (((maze1[x1][y1]>>d)&1)==0) {nx1+=dx[d]; ny1+=dy[d];} nx2=x2; ny2=y2; if (((maze2[x2][y2]>>d)&1)==0) {nx2+=dx[d]; ny2+=dy[d];} int v=nx1*1000+ny1*100+nx2*10+ny2; int w=maze1[nx1][ny1]&maze2[nx2][ny2]; if (vis[v] || ((w>>4)&1)==0) continue; vis[v]=1; dir[v]=d; fa[v]=u; q[++rear]=v; } } return -1; } int main() { int T,i,j; scanf("%d",&T); memset(maze2,0,sizeof(maze2)); for (i=1;i<=6;i++) for (j=1;j<=6;j++) scanf("%d",&maze2[i][j]); T--; while (T--) { memcpy(maze1,maze2,sizeof(maze1)); for (i=1;i<=6;i++) for (j=1;j<=6;j++) scanf("%d",&maze2[i][j]); memset(vis,0,sizeof(vis)); memset(dir,0,sizeof(dir)); memset(fa,0,sizeof(fa)); int x1,y1,x2,y2; for (i=1;i<=6;i++) for (j=1;j<=6;j++) if ((maze1[i][j]>>5)&1) {x1=i; y1=j;} for (i=1;i<=6;i++) for (j=1;j<=6;j++) if ((maze2[i][j]>>5)&1) {x2=i; y2=j;} int e=bfs(x1,y1,x2,y2); if (e==-1) {printf("-1\n"); continue;} int m=0; for (i=e;i;i=fa[i]) dir2[++m]=dir[i]; m--; for (i=m;i;i--) printf("%c",dd[dir2[i]]); printf("\n"); } return 0; }
相关文章推荐
- hdu 3713 Double Maze(四维的BFS)
- HDU-3713---Double Maze (bfs) 详细解释
- HDU 3713 Double Maze
- HDU 3713 Double Maze
- HDU 3713 Double Maze(DFS)
- HDU 3713 Double Maze
- HDU-3713:Double Maze(双重BFS)
- uvalive 5008 hdu 3717 double maze 四维bfs(好题)
- hdu - 2216 Game III && xtu 1187 Double Maze (两个点的普通bfs)
- hdoj 3713 Double Maze (四维BFS + 打印路径)
- HDU 3065 病毒侵袭持续中(AC自动机)
- hdu 1014 Uniform Generator
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 多重背包
- HDU 1312 矩阵中找出初始点的可达点数 简单bfs
- HDU 2137 circumgyrate the string
- hdu-4519-二分-郑厂长系列故事——体检
- HDU 2087剪花布条(简单KMP)
- hdu 3177
- hdu 4528——小明系列故事——捉迷藏
- hdu 2212