HDU - 2364 Escape
来源:互联网 发布:ios日本漫画软件 编辑:程序博客网 时间:2024/05/16 23:33
题意:求起始点到任意一条边的最短距离。规则是:可以拐弯的话就不能直走,否则直走
思路:BFS,不过vis的标记数组要变成三维的,记录从四个方向进来的可能
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int MAXN = 110;struct node{int x,y,p;int s;}q[MAXN*MAXN*4],tmp;int map[MAXN][MAXN],n,m;int vis[MAXN][MAXN][4];int sx,sy;char str[MAXN];int dir[4][2] = {1,0,0,1,-1,0,0,-1};int bfs(){if (sx == 1 || sx == n || sy == 1 || sy == m)return 0;int head,tail,x,y,s,p;memset(vis,0,sizeof(vis));for (int i = 0; i < 4; i++)vis[sx][sy][i] = 1;head = tail = 0;tmp.x = sx,tmp.y = sy,tmp.s = 0,tmp.p = -1;q[head] = tmp;while (head <= tail){int flag = 0;x = q[head].x,y = q[head].y;s = q[head].s,p = q[head].p;for (int i = 0; i < 4; i++)if (p < 0 || (p&1) != (i&1)){tmp.x = x + dir[i][0];tmp.y = y + dir[i][1];if (map[tmp.x][tmp.y] == 0)continue;flag = 1;if (vis[tmp.x][tmp.y][i])continue;tmp.s = s + 1,tmp.p = i;if (tmp.x == 1 || tmp.x == n || tmp.y == 1 || tmp.y == m)return tmp.s;vis[tmp.x][tmp.y][i] = 1;q[++tail] = tmp;}if (!flag){tmp.x = x + dir[p][0];tmp.y = y + dir[p][1];if (map[tmp.x][tmp.y] != 0 && vis[tmp.x][tmp.y][p] == 0){tmp.s = s + 1,tmp.p = p;if (tmp.x == 1 || tmp.x == n || tmp.y == 1 || tmp.y == m)return tmp.s;vis[tmp.x][tmp.y][p] = 1;q[++tail] = tmp;}}++head;}return -1;}int main(){int t;scanf("%d",&t);while (t--){scanf("%d%d",&n,&m);memset(map,0,sizeof(map));for (int i = 1; i <= n; i++){scanf("%s",str);for (int j = 0; j < m; j++)if (str[j] == '#')map[i][j+1] = 0;else {map[i][j+1] = 1;if (str[j] == '@')sx = i,sy = j+1;}}printf("%d\n",bfs());}return 0;}
0 0
- HDU - 2364 Escape
- HDU 2364 Escape
- hdu-2364-Escape(bfs)
- hdu Escape
- Escape HDU
- Escape HDU
- Escape HDU
- Escape HDU
- HDU---2364 Escape【广度优先搜索】
- hdu 2364 Escape【模拟优先队列】【bfs】
- hdu 1733 Escape
- hdu 1733 Escape
- Hdu 3605 Escape
- Hdu 3605 Escape
- BFS-hdu-3533-Escape
- HDU 3533 Escape
- HDU 3533 Escape
- HDU-3533-Escape(BFS)
- (一)如何建立 Android Application Project
- SOJ3085
- java的静态方法
- Oc类和对象
- 字典树(模版+源码)
- HDU - 2364 Escape
- Qt5官方Demo解析集5——Threaded Fortune Server
- ByteArrayInputStream之内存溢出(IoUtils)
- 计算机网络(5)应用层
- poj 2718 Smallest Difference
- 颠倒的价牌 - 蓝桥杯
- 服务器端配置MySQL
- 请求生命周期回调(Controllers)
- c++模板两个数的加法