目录
题意:给定 n * m的矩阵,让你并给定初始坐标和末坐标,你只能走'.',并且走过的'.'都会变成'X',然后问你能不能在末坐标是'X'的时候走进去。
析:这个题,在比赛时就是没做出来,其实是一个水题,但是我理解错了意思,让下面提示的第一组样例给搞乱。
思路应该是这样的,从开始坐标BFS末坐标,把经过的都标成'X',如果直到末坐标是'.',接着走,如果能直到末坐标是'X',就是可以,否则就是不可以。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn = 500 + 5; const int INF = 0x3f3f3f3f; const int dr[] = {0, 0, 1, -1}; const int dc[] = {1, -1, 0, 0}; struct node{ int r, c; node( int rr = 0, int cc = 0) : r(rr), c(cc) { } }; int n, m; char s[maxn][maxn]; int r2, c2; bool is_in( int r, int c){ return r >= 0 && r < n && c >= 0 && c < m; } bool bfs( int r, int c){ queue<node> q; q.push(node(r, c)); s[r][c] = 'X' ; while (!q.empty()){ node u = q.front(); q.pop(); for ( int i = 0; i < 4; ++i){ int x = u.r + dr[i]; int y = u.c + dc[i]; if (x == r2 && y == c2 && s[x][y] == 'X' ) return true ; if (is_in(x, y) && s[x][y] == '.' ){ s[x][y] = 'X' ; q.push(node(x, y)); } } } return false ; } int main(){ scanf ( "%d %d" , &n, &m); for ( int i = 0; i < n; ++i) scanf ( "%s" , s[i]); int r1, c1; cin >> r1 >> c1 >> r2 >> c2; --r1, --r2, --c1, --c2; if (bfs(r1, c1)) puts ( "YES" ); else puts ( "NO" ); return 0; } |
分类:
暴力求解
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥