#include <stdio.h> struct node{ int x; int y; int step; }first; int zx[4]={-1,0,1,0}; int zy[4]={0,-1,0,1}; int a[10][10]; node queue[100]={0}; int head=0,tail=0; int b[10][10]={0}; int flagx,flagy,flag1x,flag1y; //进栈 void en(node E) { queue[tail++]=E; } //出栈 node qe() { return queue[head++]; } void bfs() { first.x=flagx; first.y=flagy; en(first); b[first.x][first.y]=1; node cur={}; node ns={}; int d1=1,d2=0,d3=0,d4=0; while(head<tail) { cur=qe(); printf("%d %d\n",cur.x ,cur.y); if(cur.x==flag1x&&cur.y==flag1y) { printf("%d\n",cur.step); break; } for(int i=0;i<4;i++) { ns=cur; ns.x=ns.x+zx[i]; ns.y=ns.y+zy[i]; //直走 if(i==0) { if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘) { if(!b[ns.x][ns.y]) { b[ns.x][ns.y]=1; d1++; d2=0; d3=0; d4=0; if(d1==1) ns.step++; ns.step++; printf("step=%d\n",ns.step); en(ns); } } } //后退 if(i==2) { if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘) { if(!b[ns.x][ns.y]) { b[ns.x][ns.y]=1; d1=0; d2=0; d3=0; d4++; if(d4==1) ns.step++; ns.step++; printf("step=%d\n",ns.step); en(ns); } } } //左转 if(i==1) { if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘) { if(!b[ns.x][ns.y]) { b[ns.x][ns.y]=1; d1=0; d2++; d3=0; d4=0; if(d2==1) ns.step++; ns.step++; printf("step=%d\n",ns.step); en(ns); } } } //右转 if(i==3) { if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘) { if(!b[ns.x][ns.y]) { b[ns.x][ns.y]=1; d1=0; d2=0; d3++; d4=0; if(d3==1) ns.step++; ns.step++; printf("step=%d\n",ns.step); en(ns); } } } } } } void main() { int t,w,l; scanf("%d %d",&w,&l); for(int i=0;i<w;i++) { getchar(); for(int j=0;j<l;j++) { scanf("%c",&a[i][j]); if(a[i][j]==‘S‘) { flagx=i; flagy=j; a[i][j]=‘#‘; } if(a[i][j]==‘T‘) { flag1x=i; flag1y=j; } } } first.step=0; bfs(); }
时间: 2024-10-15 00:32:11