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 |
同志们,求大神们帮我看看这道题,太难了#include<cstdio> #include<cstring> const int N=100; int m,n,x1,x2,y1,y2;//m列 n行 char ch; int map[N][N]; struct node{ int x,y; int dep,s; }; struct step{ int x,y; }; step d[5]={{0,0},{0,1},{0,-1},{1,0},{-1,0},}; node data[N*N]; bool flag[N][N]; int op,cl; int num=0; int main(){ //freopen("poj1101.in","r",stdin); //freopen("poj1101 2.out","w",stdout); while(1){ scanf("%d%d",&m,&n); //printf("%d %d ",n,m); if(n==0 and m==0) return 0; memset(map,0,sizeof map); for(int i=1;i<=n;i++){ getchar(); for(int j=1;j<=m;j++){ scanf("%c",&ch); if(ch=='X') map[i][j]=1; else map[i][j]=0; } } ++num; printf("Board #%d:\n",num); int ans=0x7fffffff; int num1=0; while(1){ scanf("%d%d%d%d",&y1,&x1,&y2,&x2); if(x1==0 and y1==0 and x2==0 and y2==0) { printf("\n"); break; } memset(flag,true,sizeof flag); op=0;cl=1; data[cl].x=x1; data[cl].y=y1; data[cl].dep=0; data[cl].s=-1; flag[x1][y1]=false; bool f1=false; while(op<cl){ ++op; int xx=data[op].x; int yy=data[op].y; int dep=data[op].dep; int s=data[op].s; for(int i=1;i<=4;i++){ int xxx=xx+d[i].x; int yyy=yy+d[i].y; if((flag[xxx][yyy] and !map[xxx][yyy] and xxx>=0 and yyy>=0 and xxx<=n+1 and yyy<=m+1) or xxx==x2 and yyy==y2){ ++cl; data[cl].x=xxx; data[cl].y=yyy; data[cl].s=i; if(s!=i) data[cl].dep=dep+1; else data[cl].dep=dep; flag[xxx][yyy]=false; if(xxx==x2 and yyy==y2){ f1=true; if(ans>data[cl].dep) ans=data[cl].dep; //printf("%d ",ans); } } } } ++num1; if(f1) printf("Pair %d: %d segments.\n",num1,ans); else printf("Pair %d: impossible.\n",num1); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator