Untitled
unknown
c_cpp
3 years ago
1.3 kB
4
Indexable
#include <stdio.h> #include <string.h> int n, m, found = 0, check[1005][1005][3]; char map[1005][1005]; int di[4] = {0, 0, 1,-1}; int dj[4] = {1, -1,0, 0}; void dfs(int posi, int posj, int step){ if(posi == n && posj == m){ found = 1; return; } if(found == 1) return; for(int i = 0; i < 4; i++){ int ni = posi + di[i]; int nj = posj + dj[i]; if((step+1)%3 == 1 && map[ni][nj] == 'A') return; else if((step+1)%3 == 2 && map[ni][nj] == 'B') return; else if((step+1)%3 == 0 && map[ni][nj] == 'C') return; if(map[ni][nj] != '#' && check[ni][nj][(step+1)%3] == 0){ if(ni <= 0 || ni > n || nj <= 0 || nj > m) continue; check[ni][nj][(step+1)%3] = 1; dfs(ni, nj, step+1); } } } int main(){ int t; scanf("%d", &t); for(int k = 0; k < t; k++){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ scanf(" %c", &map[i][j]); } } dfs(1, 1, 0); if(found == 1)printf("Yes\n"); else printf("No\n"); memset(map, '\0', sizeof(map)); found = 0; } }
Editor is loading...