[USACO3.3]亚瑟王的宫殿 Camelot 有点bug,求大神。调试3天了┭┮﹏┭┮
https://www.
> Run 13: Execution error: Your program did not produce an answer
that was judged as correct. The program stopped at 0.028 seconds;
it used 7132 KB of memory. At character number 2, your answer says
'0' while the correct answer says '1'.
Here are the respective outputs:
----- our output ---------
11
---- your output ---------
10
--------------------------
------ Data for Run 13 [length=24 bytes] ------
8 8
D 5
A 3 A 8 H 1 H 8
----------------------------
程序代码:
/* ID:luojiny1 LANG:C++ TASK:camelot */ #include<cstdio> #include<cstring> #include<queue> #include<cstdlib> #define INF 0x3f3f3f3f #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; const int maxR=31,maxC=28; int R,C,n=0; int kx,ky,nx[maxR*maxC],ny[maxR*maxC],d[maxC][maxR][maxC][maxR],ans=INF; struct point{ int x,y,step; }; void bfs(int sx,int sy){ int dx[8]={-1,1,2,2,1,-1,-2,-2}; int dy[8]={2,2,1,-1,-2,-2,-1,1}; bool vis[maxC][maxR]={0}; queue<point>Q; Q.push((point){sx,sy,0}); while(!Q.empty()){ point a=Q.front();Q.pop(); int x=a.x,y=a.y; if(vis[x][y])continue; vis[x][y]=1; d[sx][sy][x][y]=a.step; for(int i=0;i<8;i++){ int newx=x+dx[i],newy=y+dy[i]; if(newx>=0&&newx<C&&newy>=0&&newy<R)Q.push((point){newx,newy,a.step+1}); } } } int main() { // freopen("camelot.in","r",stdin); // freopen("camelot.out","w",stdout); memset(d,0x3f3f3f3f,sizeof(d)); char ch; scanf("%d %d\n",&R,&C); scanf("%c %d\n",&ch,&ky); kx=ch-'A',ky--; while((ch=getchar())!=EOF)if(ch>='A'&&ch<='Z'){ scanf("%d",&ny[n]); ny[n]--,nx[n++]=ch-'A'; bfs(nx[n-1],ny[n-1]); } if(n==0){ printf("0\n"); return 0; } for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++){ int newn=dx+kx,newm=dy+ky; if(newn>=0&&newn<C&&newm>=0&&newm<R)bfs(newn,newm);} for(int newx=0;newx<C;newx++) for(int newy=0;newy<R;newy++) { int t=0; for(int i=0;i<n;i++) t+=d[nx[i]][ny[i]][newx][newy]; for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++){ int newn=dx+kx,newm=dy+ky; if(newn>=0&&newn<C&&newm>=0&&newm<R) for(int i=0;i<n;i++) ans=min(ans,t-d[nx[i]][ny[i]][newx][newy]+d[nx[i]][ny[i]][newn][newm]+abs(kx-newn)+abs(ky-newm)+min(d[newn][newm][newx][newy],abs(newn-newx)+abs(newm-newy))); } } printf("%d\n",ans); return 0; }
[此贴子已经被作者于2017-8-9 12:54编辑过]