求助大佬,实在找不到错了

P1189 SEARCH

你老代码错在:后来可以到那里,但是没有标记新的,和原来的一样被变成'.'了
by w23c3c3 @ 2018-07-24 11:30:19


附修改后正确代码: ```cpp #include <cstdio> #include <cstring> #include <queue> using namespace std; struct node { int r,c,step; }n; int R,C,N,a[1005],zl[4][2]={{-1,0},{1,0},{0,-1},{0,1}},x,y,vis[55][55]; char g[55][55],f[5][10]={"NORTH","SOUTH","WEST","EAST"},temp[10]; queue <node> q; void bfs() { n.r=x; n.c=y; n.step=0; q.push(n); vis[x][y]=0; while(!q.empty()) { int u=q.front().r; int v=q.front().c; int s=q.front().step; q.pop(); if(s==N) break; if(g[u][v]=='U')g[u][v]='*';else g[u][v]='.'; for(int i=u+zl[a[s]][0],j=v+zl[a[s]][1];g[i][j]!='X';i+=zl[a[s]][0],j+=zl[a[s]][1]) if(vis[i][j]!=s+1) { n.r=i; n.c=j; n.step=s+1; q.push(n); if(g[i][j]=='*'||g[i][j]=='U')g[i][j]='U';else g[i][j]='*'; vis[i][j]=n.step; } } return; } int main() { scanf("%d%d",&R,&C); memset(g,'X',sizeof(g)); for(int i=1;i<=R;i++) for(int j=1;j<=C;j++) { scanf(" %c",&g[i][j]); if(g[i][j]=='*') { x=i; y=j; } } scanf("%d",&N); for(int i=0;i<N;i++) { scanf(" %s",temp); for(int j=0;j<4;j++) if(!strcmp(f[j],temp)) { a[i]=j; break; } } bfs(); for(int i=1;i<=R;i++) { for(int j=1;j<=C;j++) if(g[i][j]=='U')printf("*");else printf("%c",g[i][j]); printf("\n"); } return 0; } ```
by w23c3c3 @ 2018-07-24 11:31:05


还有问题
by Mutsumi_0114 @ 2018-07-24 11:37:27


反复修改已AC ``` #include <cstdio> #include <cstring> #include <queue> using namespace std; struct node { int r,c,step; }n; int R,C,N,a[1005],zl[4][2]={{-1,0},{1,0},{0,-1},{0,1}},vis[1005][55][55]; char g[55][55],f[5][10]={"NORTH","SOUTH","WEST","EAST"},temp[10]; queue <node> q; void bfs() { while(!q.empty()) { int u=q.front().r; int v=q.front().c; int s=q.front().step; q.pop(); if(s==N) break; for(int i=u+zl[a[s]][0],j=v+zl[a[s]][1];g[i][j]!='X';i+=zl[a[s]][0],j+=zl[a[s]][1]) if(!vis[s+1][i][j]) { n.r=i; n.c=j; n.step=s+1; q.push(n); g[i][j]='*'; vis[s+1][i][j]=true; } } return; } int main() { scanf("%d%d",&R,&C); memset(g,'X',sizeof(g)); memset(vis,false,sizeof(vis)); for(int i=1;i<=R;i++) for(int j=1;j<=C;j++) { scanf(" %c",&g[i][j]); if(g[i][j]=='*') { n.r=i; n.c=j; n.step=0; q.push(n); g[i][j]='.'; vis[0][i][j]=true; } } scanf("%d",&N); for(int i=0;i<N;i++) { scanf(" %s",temp); for(int j=0;j<4;j++) if(!strcmp(f[j],temp)) { a[i]=j; break; } } bfs(); for(int i=1;i<=R;i++) { for(int j=1;j<=C;j++) if(vis[N][i][j]) printf("*"); else if(g[i][j]=='X') printf("X"); else printf("."); printf("\n"); } return 0; } ```
by Mutsumi_0114 @ 2018-07-24 11:38:13


上一页 |