loj 1055(bfs)
来源:互联网 发布:兔子白网络 编辑:程序博客网 时间:2024/05/22 04:24
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26772
思路:注意判重就行,开个6维数组记录3个robots的位置,然后要注意的就是不能多个robots同时在一个格子上,一开始没注意到这点!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 #define MAXN 11 8 9 struct Point{10 int x,y;11 };12 13 struct Node{14 Point p[3];15 int step;16 }st;17 18 char map[MAXN][MAXN];19 bool mark[MAXN][MAXN][MAXN][MAXN][MAXN][MAXN];20 int n,dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};21 22 void bfs()23 {24 memset(mark,false,sizeof(mark));25 queue<Node>que;26 st.step=0;27 que.push(st);28 mark[st.p[0].x][st.p[0].y][st.p[1].x][st.p[1].y][st.p[2].x][st.p[2].y]=true;29 while(!que.empty()){30 Node q,pp=que.front();31 que.pop();32 if(map[pp.p[0].x][pp.p[0].y]=='X'&&map[pp.p[1].x][pp.p[1].y]=='X'&&map[pp.p[2].x][pp.p[2].y]=='X'){33 printf("%d\n",pp.step);34 return ;35 }36 for(int i=0;i<4;i++){37 for(int j=0;j<=2;j++){38 q.p[j].x=pp.p[j].x+dir[i][0],q.p[j].y=pp.p[j].y+dir[i][1];39 if(q.p[j].x<0||q.p[j].x>=n||q.p[j].y<0||q.p[j].y>=n){40 q.p[j].x=pp.p[j].x,q.p[j].y=pp.p[j].y;41 }else if(map[q.p[j].x][q.p[j].y]=='#'){42 q.p[j].x=pp.p[j].x,q.p[j].y=pp.p[j].y;43 }44 }45 //robots不能在同一个格子上46 for(int l=0;l<=2;l++){47 for(int j=0;j<=2;j++){48 for(int k=0;k<=2;k++)if(j!=k){49 if(q.p[j].x==q.p[k].x&&q.p[j].y==q.p[k].y)q.p[j].x=pp.p[j].x,q.p[j].y=pp.p[j].y;50 }51 }52 }53 if(!mark[q.p[0].x][q.p[0].y][q.p[1].x][q.p[1].y][q.p[2].x][q.p[2].y]){54 mark[q.p[0].x][q.p[0].y][q.p[1].x][q.p[1].y][q.p[2].x][q.p[2].y]=true;55 q.step=pp.step+1;56 que.push(q);57 }58 }59 }60 puts("trapped");61 }62 63 64 int main()65 {66 int _case,num,t=1;67 scanf("%d",&_case);68 while(_case--){69 scanf("%d",&n);70 num=0;71 for(int i=0;i<n;i++){72 scanf("%s",map[i]);73 for(int j=0;j<n;j++){74 if(map[i][j]=='A'||map[i][j]=='B'||map[i][j]=='C'){75 st.p[num].x=i,st.p[num].y=j;76 num++;77 }78 }79 }80 printf("Case %d: ",t++);81 bfs();82 }83 return 0;84 }
0 0
- loj 1055(bfs)
- loj 1046(bfs)
- loj 1185(bfs)
- loj 1377 (bfs)
- loj 1426(dfs + bfs)
- loj 1165(bfs+康托展开)
- LOJ 1060
- LOJ 1119
- loj 1271
- loj 1337
- LOJ 1070
- Loj #114
- loj 1224 - DNA Prefix
- LOJ 1307 Counting Triangles
- loj 1063(求割点个数)
- loj 1009(dfs)
- loj 1168(Tarjan应用)
- loj 1004(dp)
- loj 1308(点双连通分量应用)
- loj 1108(spfa判负环)
- loj 1221(spfa判正环)
- loj 1009(dfs)
- loj 1046(bfs)
- loj 1055(bfs)
- loj 1165(bfs+康托展开)
- loj 1185(bfs)
- ural 1018(树形dp)
- poj 3140(树形dp)
- loj 1034(最小点基)
- poj 2486( 树形dp)
- poj 1935(树形dp)
- loj 1168(Tarjan应用)