题目与最基本的BFS迷宫的区别就是有一些障碍,可以通过建立三维数组,标记某个地方有障碍不能走。另一个点是输出路径,对此建立结构体时要建立一个pre变量,指向前一个的下标。这样回溯(方法十分经典)就可以顺利的输出。
这道题难度的确很小,可是我却花了近两个小时才顺利AC,实在是现在水平太不足了,要努力学习的真的是有好多啊。不管怎样,尽力吧。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 struct grid 7 { 8 int x,y;//坐标 9 int pre;//回溯前一个的下标 10 int dir; 11 }point[5025]; 12 int si,sj,ei,ej,a[4],dir[10][10][4],direction[4][2]={ {-1,0},{ 0,1},{ 1,0},{ 0,-1}},vi[8][8]; 13 int bfs() 14 { 15 memset(vi,0,sizeof(vi)); 16 int front=0,tail=1; 17 point[front].x=si; 18 point[front].y=sj; 19 point[front].pre=-1; 20 grid temp,temp2; 21 vi[si][sj]=1; 22 while(front 0) 51 { 52 print(point[x].pre); 53 if(point[x].dir==0) 54 { 55 printf("N"); 56 } 57 else if(point[x].dir==1) 58 { 59 printf("E"); 60 } 61 else if(point[x].dir==2) 62 { 63 printf("S"); 64 } 65 else printf("W"); 66 } 67 68 } 69 int main() 70 { 71 while(scanf("%d%d",&sj,&si)) 72 { 73 int i,j,k,an; 74 if(si==0&&sj==0) 75 break; 76 scanf("%d%d",&ej,&ei); 77 memset(dir,0,sizeof(dir)); 78 for(i=1;i<=6;i++) 79 { 80 dir[1][i][0]=1; 81 dir[6][i][2]=1; 82 dir[i][1][3]=1; 83 dir[i][6][1]=1; 84 } 85 for(j=0;j<3;j++){ 86 scanf("%d %d %d %d",&a[1],&a[0],&a[3],&a[2]);//注意数据是行列与平常不同的 87 88 if(a[0]==a[2]) 89 { 90 for(k=min(a[1],a[3])+1;k