来源:互联网 发布:linux 查看文件名称 编辑:程序博客网 时间:2024/04/28 08:05

题目都看错了!!哎~~~

之前的错误版~~~~

#include<stdio.h>#include<string.h>char map[80][80];int vis[80*80],q[80*80],dis[80*80];int w,h;int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};int search(int x1,int y1,int x2,int y2){int rear=1,front=0;int x=x1,y=y1,z=x*w+y;q[0]=z,dis[0]=0,vis[z]=1;while(front<rear){int z=q[front];x=z/w,y=z%w;//printf("%d %d\n",x,y);for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];int nz=nx*w+ny;if(!vis[nz] && nx>=0 && nx<=h+1 && ny>=0 && ny<=w+1){if(nx==x2 && ny==y2) return dis[front];if(map[nx][ny]!='X'){vis[nz]=1;q[rear]=nz;dis[rear]=dis[front]+1;rear++;}}}front++;}return -1;}int main(){int i,j,q=1;int x1,x2,y1,y2;while(scanf("%d%d",&w,&h) && w!=0){memset(map,0,sizeof(map));getchar();for(i=1;i<=h;i++){gets(map[i]);for(j=w;j>0;j--)map[i][j]=map[i][j-1];map[i][0]=' ';}printf("Board #%d:\n",q++);int p=1;while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2) &&!(x1==0 && y1==0 && x2==0 && y2==0)){memset(vis,0,sizeof(vis));int ans=search(y1,x1,y2,x2);if(ans!=-1) printf("Pair %d: %d segments.\n",p++,ans);else printf("Pair %d: impossible.\n",p++);}}return 0;}


 

原创粉丝点击