Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么总是runtime error,就算在增大100倍也一样,向各位大牛求助#include<stdio.h> #include<string.h> #define blue 1 #define black 2 #define white -1 int vist[2500][2500],L,t,flag,opt[2500][2500]; struct node { int xx,yy; }snake[1000],dui[1000][100]; int m,n; void bfs(int x,int y)//蛇头坐标 { struct node tem[10]; int rear=0,front=0,i,j; dui[rear][1].xx=x; dui[rear][1].yy=y; for(i=2;i<=L;i++) { dui[rear][i].xx=snake[i].xx; dui[rear][i].yy=snake[i].yy; } opt[x][y]=0;//最短距离 vist[x][y]=blue;//标记数组; front++; while(rear!=front) { for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(vist[i][j]!=black) { vist[i][j]=white; } } } for(i=1;i<=L;i++) { tem[i].xx=dui[rear][i].xx; tem[i].yy=dui[rear][i].yy; if(vist[tem[i].xx][tem[i].yy]==white) { vist[tem[i].xx][tem[i].yy]=blue; } } rear++; x=tem[1].xx; y=tem[1].yy;//蛇头坐标 if(x==y&&x==1) { flag=1; t=opt[x][y]; break; } if(vist[x+1][y]==white) { vist[x+1][y]=blue; opt[x+1][y]=opt[x][y]+1; dui[front][1].xx=x+1; dui[front][1].yy=y; for(i=2;i<=L;i++) { dui[front][i].xx=tem[i-1].xx; dui[front][i].yy=tem[i-1].yy; } front++; } if(vist[x-1][y]==white) { vist[x-1][y]=blue; opt[x-1][y]=opt[x][y]+1; dui[front][1].xx=x-1; dui[front][1].yy=y; for(i=2;i<=L;i++) { dui[front][i].xx=tem[i-1].xx; dui[front][i].yy=tem[i-1].yy; } front++; } if(vist[x][y+1]==white) { vist[x][y+1]=blue; opt[x][y+1]=opt[x][y]+1; dui[front][1].xx=x; dui[front][1].yy=y+1; for(i=2;i<=L;i++) { dui[front][i].xx=tem[i-1].xx; dui[front][i].yy=tem[i-1].yy; } front++; } if(vist[x][y-1]==white) { vist[x][y-1]=blue; opt[x][y-1]=opt[x][y]+1; dui[front][1].xx=x; dui[front][1].yy=y-1; for(i=2;i<=L;i++) { dui[front][i].xx=tem[i-1].xx; dui[front][i].yy=tem[i-1].yy; } front++; } } return ; } int main() { int i,j,zong,K,x,y; for(zong=1;;zong++) { flag=0; memset(opt,0,sizeof(opt)); memset(vist,0,sizeof(vist)); scanf("%d%d%d",&m,&n,&L); if(m==n&&n==L&&L==0) break; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { vist[i][j]=white; } } for(i=1;i<=L;i++) { scanf("%d %d",&snake[i].xx,&snake[i].yy); //map[snake[i].xx][snake[i].yy]=blue; } scanf("%d",&K); for(i=1;i<=K;i++) { scanf("%d %d",&x,&y); vist[x][y]=black; } bfs(snake[1].xx,snake[1].yy); if(flag==1) { printf("Case %d: %d\n",zong,t); } else { printf("Case %d: -1\n",zong); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator