DFS or BFS?


テーマの説明はいいですが、テーマは黒人ではありません.
あなたに8*8の行列をあげて、あなたの初期の位置は左下の角の四角形です(‘U’で表します)、あなたの目標の位置は右上の角の四角形です(‘A’で表す)、残りの62個の四角い格子、もし‘.’であれば、この四角い格子が空であることを表し、‘S’であれば、この四角い格子に大きな石があることを表す.よし、今から左下から出発して、毎回上、下、左、右、左上、右上、左下、右下に四角い格子を移動して、あるいはあなたはその場で動かなくてもいい、全部で9つの動作方式で、あなたは一つの動作が終わると、すべての大きな石が下に1つの四角形(大きな石の位置が(x,y)であれば、次の秒は(x+1,y)ですが、もしそれがすでに一番下の列に並んでいたら、行列が落ちて、もう現れません)、いつでも、ある大きな石と同じ四角形にいてはいけません.そうしないと、石はあなたをXXに落とすことに注意してください.
今の問題は、左下から安全に右上に着くことができますか?できれば「Yes」を出力し、逆に「No」を出力します.
T->テストデータ群数(T)を入力します.
各データのセットについて、8*8のマトリクスを入力し、その後に空の行を入力します.上記のように説明します.
出力i番目のグループのデータに対して、出力してください
Case#i:s(sは文字列であり、到達可能であればsは「Yes」、逆に「No」)
サンプル入力2…A…………U…
...A..........S...S...US...サンプル出力Case#1:Yes Case#2:No注:1.石の落下は広捜判断条件に2点を加えることができ、後退時間は、所在行p.x-p.sの所在列がSまたは所在行の上の行のp.x-p.s+1の所在列がSである場合、行列は出ない2.広捜終了:8歩目が終点に着くか、8歩を超えると生存できる8歩後、石は落ちて、きっと安全に到着することができます
#include
#include
#include
#include
using namespace std;
char arr[20][20];//    
int dir[9][2]={{0,0},{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
struct node{
    int x;
    int y;
    int s;
};
int BFS(){
    node p,q;
    queueque;
    q.x=7;
    q.y=0;
    q.s=0;
    que.push(q);
    while(que.size()){
        q=que.front();
        que.pop();
        for(int i=0;i<9;i++){
            p.x=q.x+dir[i][0];
            p.y=q.y+dir[i][1];
            p.s=q.s+1;
            //    ,    p.x-p.s     S        p.x-p.s+1     S      
            if(p.x<0||p.y<0||p.x>=8||p.y>=8||arr[p.x-p.s][p.y]=='S'||arr[p.x-p.s+1][p.y]=='S')
                continue;
            //             ,       ,        
            if(arr[p.x][p.y]=='A'||p.s>8)
            return 1;
            que.push(p);
        }
    }
    return 0;
}

int main()
{
    int T,sum,test=0;
    scanf("%d",&T);
    while(test