求助
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int g_t;
char subway[3][301];
int vis[3][301];
typedef struct{
int l;
int x;
int y;
}pairs;
typedef struct {
int size;
pairs* data;
}queue;
int is_letter(char a){
return ( 'A' <= a && 'Z' >= a ) ? 1 : 0;
}
queue* queue_new(int length){
queue* temp = (queue*)malloc(sizeof(queue));;
temp->data = (pairs*)malloc( (length+1) * sizeof(pairs));
return temp;
}
void queue_append(queue* aList,pairs element){
aList->data[aList->size] = element;
aList->size += 1;
}
pairs queue_push(queue* aList){
pairs res = aList->data[0];
for (int i = 1 ; i < aList->size ; i ++ ){
aList->data[i-1] = aList->data[i];
}
aList->size -= 1;
return res;
}
void bfs(int stx,int sty,int width){
queue* temp = queue_new(10001);
pairs t;t.y = stx;t.x = sty;t.l = 0;
queue_append(temp,t);
while (temp->size>0){
pairs popout = queue_push(temp);
int x = popout.x,y = popout.y;
if ( y >= width ){
printf("YES\n");
return;
}
if ( is_letter(subway[x][y+3]) == 0 && is_letter(subway[x][y+1]) == 0 && vis[x][y+3]==0){
pairs add;add.x = x;add.y = y + 3;
vis[add.x][add.y] = 1;
queue_append(temp,add);
}
if ( is_letter(subway[x+1][y+3]) == 0 && vis[x+1][y+3]==0 && is_letter(subway[x+1][y+1]) == 0 && is_letter(subway[x][y+1]) == 0 && is_letter(subway[x+1][y+2]) == 0 && x + 1 < 3 ){
pairs add;add.x = x + 1;add.y = y + 3;
vis[add.x][add.y] = 1;
queue_append(temp,add);
}
if ( is_letter(subway[x-1][y+3]) == 0 && vis[x-1][y+3]==0 && is_letter(subway[x][y+1]) == 0 && is_letter(subway[x-1][y+1]) == 0 && is_letter(subway[x-1][y+2]) == 0 && x >= 1 ){
pairs add;add.x = x - 1;add.y = y + 3;
vis[add.x][add.y] = 1;
queue_append(temp,add);
}
}
printf("NO\n");
return;
}
int main(){
scanf("%d",&g_t);
for (int i = 0 ; i < g_t ; i ++ ){
memset(vis,0,sizeof(vis));
memset(subway,0,sizeof(subway));
int m,n,stx,sty;
scanf("%d%d",&m,&n);
for (int h = 0 ; h < 3 ; h ++ ){
scanf("%s",subway[h]);
}
for (int x = 0 ; x < 3 ; x ++ ){
if ( subway[x][0] == 's' ){
stx = 0;sty = x;
}
}
bfs(stx,sty,m);
}
return 0;
}
'''