向前走,何处是终点呢?
//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;
}