NYOJ999~师傅又被妖怪抓走了
来源:互联网 发布:个人简历模板软件 编辑:程序博客网 时间:2024/04/28 01:05
思路:BFS。多加一个状态就可以了,状态的变化不是很好写。看代码理解吧。
#include<bits/stdc++.h>using namespace std;const int MAXN = 105;struct node{int x,y,state,step;}NOW,NEXT;int n, m, t, sx, sy, ex1, ey1, ex2, ey2, dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};char MAP[MAXN][MAXN];bool vis[MAXN][MAXN][4];int update(int x,int y,int state)//状态更新 {bool flag1 = false, flag2 = false;//flag1表示是否找到了D, flag表示是否找到了E if(state == 1) flag1 = true; if(state >= 2) flag2 = true; for(int i = x; i < n; i++){if(MAP[i][y] == 'D') flag1 = true;if(MAP[i][y] == 'E') flag2 = true;if(MAP[i][y] != '.') break;}for(int i = x; i >= 0; i--){if(MAP[i][y] == 'D') flag1 = true;if(MAP[i][y] == 'E') flag2 = true;if(MAP[i][y] != '.') break;}for(int i = y; i < m; i++){if(MAP[x][i] == 'D') flag1 = true;if(MAP[x][i] == 'E') flag2 = true;if(MAP[x][i] != '.') break;}for(int i = y; i >= 0; i--){if(MAP[x][i] == 'D') flag1 = true;if(MAP[x][i] == 'E') flag2 = true;if(MAP[x][i] != '.') break;}if(flag1 == false && flag2 == false) return 0;if(flag1 == true && flag2 == false) return 1;if(flag1 == false && flag2 == true) return 2;if(flag1 == true && flag2 == true) return 3;}int bfs(){memset(vis,0,sizeof(vis));NOW.x = sx; NOW.y = sy; NOW.step = 0; NOW.state = update(sx,sy,0); vis[sx][sy][NOW.state] = true;queue<node> q;q.push(NOW);while(!q.empty()){NOW = q.front();if(NOW.state == 3) return NOW.step;q.pop();for(int i = 0; i < 4; i++){int X = NOW.x + dir[i][0], Y = NOW.y + dir[i][1], state = update(X,Y,NOW.state);if(X >= 0 && Y >= 0 && X < n && Y < m && vis[X][Y][state] == false && MAP[X][Y] == '.'){vis[X][Y][state] = true;NEXT.x = X; NEXT.y = Y; NEXT.state = state; NEXT.step = NOW.step + 1; q.push(NEXT);}}}return -1;//找不到 }int main(){int CASE = 1;while(~scanf("%d%d%d",&n,&m,&t)){for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){cin>>MAP[i][j];if(MAP[i][j] == 'S'){ MAP[i][j] = '.'; sx = i; sy = j; }}}printf("Case %d:\n",CASE++);int ans = bfs();if(ans > t) ans = -1;//时间不够用 printf("%d\n",ans);}return 0;}
阅读全文
1 0
- NYOJ999~师傅又被妖怪抓走了
- nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
- NYOJ999 师傅又被妖怪抓走了(预处理+状态压缩+广搜BFS)
- 师傅又被妖怪抓走了
- 师傅又被妖怪抓走了
- 师傅又被妖怪抓走了
- nyoj-999 师傅又被妖怪抓走了
- NYOJ 999 师傅又被妖怪抓走了(待续)
- NYOJ-999-师傅又被妖怪抓走了
- NYOJ 师傅又被妖怪抓走了 双向BFS
- nyist 999 师傅又被妖怪抓走了 【双广搜 || BFS +状态压缩】
- 可重复广搜 —— NYOJ 999 师傅又被妖怪抓走了
- [水]Openjudge 大师兄,师傅被妖怪抓走啦
- openjudge 大师兄,师傅被妖怪抓走啦
- Openjudge6039 大师兄,师傅被妖怪抓走啦(模拟)
- 师傅,那妖怪又来了
- shu_1548 悟空的难题(大师兄,师傅被妖怪抓走啦!)
- 师傅,JAVA是妖怪!
- 计算机系统漫游
- magic balls
- 144. Binary Tree Preorder Traversal
- Banner+RecyclerView+上拉刷新下拉加载
- Django框架学习笔记(9.ORM基本操作)
- NYOJ999~师傅又被妖怪抓走了
- Linux内核中的数据结构-------基础树
- python——课题
- 白鹿原
- 网络编程之TCP协议
- MAVEN SSH框架整合(XML篇)
- 从零写一个小的解释器(一)
- HEVC中xcompressCU函数
- React native webview post请求 参数错误