为啥第一个就RE
查看原帖
为啥第一个就RE
545026
syLph楼主2022/4/6 22:53

求助

#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;
}
'''
2022/4/6 22:53
加载中...