向前走,何处是终点呢?向前走,何处是终点呢?

//CodeForces - 1365D
#include<iostream>
#include<string.h>
using namespace std;
int x_f[4] = {-1,0,1,0};
int y_f[4] = {0,1,0,-1};
char mp[55][55];
bool vis[55][55];
int t,n,m;
struct MAN{
	int x,y;
}bad_loc[2500],good_loc[2500];



void dfs(int x,int y){
	vis[x][y] = 1;
	for(int i = 0;i < 4;i++){
		int a = x + x_f[i];
		int b = y + y_f[i];
		if(a >= 1 && a <= n && b >= 1 && b <= m && mp[a][b] != '#' && !vis[a][b])
			dfs(a,b);
	}
}


void solve(){
	int cnt_g = 0,cnt_b = 0;
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			if(mp[i][j] == 'B'){
				bad_loc[cnt_b].x = i;bad_loc[cnt_b].y = j;
				cnt_b++;
			}
			if(mp[i][j] == 'G'){
				good_loc[cnt_g].x = i;good_loc[cnt_g].y = j;
				cnt_g++;
			}
		}
	}
	if(cnt_g == 0){
		cout << "Yes\n";
		return;
	}else{
		int flag1 = 0; 
		for(int i = 0;i < cnt_b;i++){
			int x_1 = bad_loc[i].x,y_1 = bad_loc[i].y;
			for(int j = 0;j < 4;j++){
				if(mp[x_1+x_f[j]][y_1+y_f[j]] == 'G'){
					flag1++;
				}
			}
			if(flag1 > 0){
				cout << "No\n";
				return;
			}else{
				for(int j = 0;j < 4;j++) {
            		int a = x_1 + x_f[j];
            		int b = y_1 + y_f[j];
            		if (a >= 1 && a <= n && b >= 1 && b <= m && mp[a][b] == '.') {
                		mp[a][b] = '#';
                	}
            	}
			}
		}
		memset(vis,0,sizeof vis);
		if(mp[n][m] != '#'){
			dfs(n,m);
		}
		
		for(int i = 0;i < cnt_g;i++) {
			int xxx = good_loc[i].x;
			int yyy = good_loc[i].y;
			if(!vis[xxx][yyy]){
				cout << "No\n";
				return;
			}
		}
		for (int i = 0;i < cnt_b; i++){
        	int xxxxx = bad_loc[i].x;
        	int yyyyy = bad_loc[i].y;
        	if (vis[xxxxx][yyyyy]){ 
        	    cout << "No\n";
         	   return;
        	}
    	}	
		cout << "Yes\n";
	}
}
//ccf
int main(){
	cin >> t;
	while(t--){
		cin >> n >> m;
		for(int i = 1;i <= n;i++)
			for(int j = 1;j <= m;j++)
				cin >> mp[i][j];
		solve();
	}
	return 0;
} 
//CodeForces CF707B
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
#include <queue>
using namespace std;

struct Node{
	int to,nxt,w;
}edge[100010];
int head[100010];

int n,m,k,cnt = 1;
int kk[100010];
vector<int > stall;
vector<int > distance;
bool visited[100010];

void bfs(int start){
	queue<int > Q;
	visited[start] = 1;
	Q.push(start);
	while(!Q.empty()) {
		int u = Q.front();
		Q.pop();
		for(int i = head[u];i != -1;i != edge[i].nxt){
			int v = edge[i].to;
			if(!visited[v]) {
				//cout << v << "\t";
				visited[v] = true;
			}
			//TODO
		}
	}
}

void add(int u,int v,int l){
	edge[cnt].to = v;
	edge[cnt].w = l;
	edge[cnt].nxt = head[u];
	head[u] = cnt++;
}

void check(){
	if(k  == 0){
		cout << -1;
		return;
	}else{
		int amount_of_stall = stall.size();
		for(int i = 0;i < amount_of_stall;i++){
			bfs(stall[i]);
		}
	}
}




int main(){
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	
	cin >> n >> m >> k;
	fill(head,head+n,-1);
	for(int i = 1;i <= m;i++){
		int u,v,l;
		cin >> u >> v >> l;
		add(u,v,l);
		add(v,u,l);
	}
	if(k > 0){
		for(int i = 1;i <= k;i++) {
			int ppp;
			cin >> ppp;
			stall.push_back(ppp);

		}
	}
	check();
	
	/*for(int i = 1; i <= n; i++)//n个起点
	{
		cout << i << endl;
		for(int j = head[i]; j != -1; j = edge[j].nxt)//遍历以i为起点的边
		{
			cout << i << " " << edge[j].to << " " << edge[j].w << endl;
		}
		cout << endl;
	}*/
	return 0;
}
#include <iostream>
#include <climits>
using namespace std;
const int MAXN = 100005;
int graph[MAXN][MAXN];
int dis[MAXN];
int n,m,s;

bool bellman_ford(int n,int s){
	memset(dis,0x3f,sizeof(dis));
	dis[s] = 0;
	for(int k = 1;k <= n;i++) {
		for(int i = 1;i <= n;i++) {
			
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> n >> m >> s;
	for(int i = 1;i <= n;i++) {
		int u,v,w;
		cin >> u >> v >> w;
		graph[u][v] = w;
	}
	
	return 0;
}