坑爹题,两种输入输出互相交换,裸bfs
#include <stdio.h> #include <string.h> typedef struct { int x; int y; } point; point q[310]; int vis[15][15],mat[15][15]; int dx[4]= {1,0,-1,0}; int dy[4]= {0,1,0,-1}; char ans[5]= {"RTLB"}; int bfs1(int x,int y) { int front=0,rear=0; q[rear].x=x; q[rear].y=y; rear++; while(front<rear) { int u=q[front].x; int v=q[front].y; for(int i=0; i<4; i++) { int xx=u+dx[i]; int yy=v+dy[i]; if(mat[xx][yy]&&!vis[xx][yy]&&xx>0&&xx<=10&&yy>0&&yy<=10) { printf("%c",ans[i]); vis[xx][yy]=1; q[rear].x=xx; q[rear].y=yy; rear++; } } front++; if(front==rear) printf(".\n"); else printf(",\n"); } } int bfs2(int x,int y) { int front=0,rear=0; char s[10]; q[rear].x=x; q[rear].y=y; rear++; while(front<rear) { int u=q[front].x; int v=q[front].y; scanf("%s",s); for(int i=0;i<strlen(s)-1;i++) { for(int j=0;j<4;j++) if(s[i]==ans[j]) { int xx=u+dx[j]; int yy=v+dy[j]; mat[xx][yy]=1; q[rear].x=xx; q[rear].y=yy; rear++; } } front++; } int ct=0; for(int i=1;i<=10;i++) { for(int j=1;j<=10;j++) if(mat[i][j])ct++; } printf("%d\n",ct); for(int i=1;i<=10;i++) { for(int j=1;j<=10;j++) if(mat[i][j]) printf("%d %d\n",i,j); } } int main() { int n,x,y,k; memset(mat,0,sizeof(mat)); memset(vis,0,sizeof(vis)); while(scanf("%d",&n)==1) { int a; if(getchar()=='\n') { while(n--) { scanf("%d%d",&x,&y); mat[x][y]=1; } for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { if(mat[i][j]&&!vis[i][j]) { vis[i][j]=1; printf("%d %d\n",i,j); bfs1(i,j); } } } } else { scanf("%d",&k); mat[n][k]=1; bfs2(n,k); } } return 0; }