帅气的HYC迷路了
来源:互联网 发布:弱电系统集成软件 编辑:程序博客网 时间:2024/04/28 22:22
有一天, 我们帅气的HYC找到了一张藏宝图, 这张图很神奇, 只要你看它一眼, 立马就会被传送到一个迷宫里, 这个迷宫仅有一个出口.那么现在问题来啦, 问你找到这个出口需要走多少步?
现在给出HYC在迷宫房中走的规则, HYC每走出一步, 都会优先向左走, 如果左边是墙, 那么他会向前走, 如果前边也是墙, 那么他就会向右走, 如果右边也是墙, 那么他只能选择后退了~~~~>_<~~~~
另外, HYC也想知道如果不这样走, 他最少能走多少步能走出出口呢?
首先给出一个T (1 <= T < 100) 代表T组测试数据 每组测试数据第一行为两个整数r 和 c (3 <= r,c <= 40) r代表这个迷宫有多少列,c代表这个迷宫有多少行. S表示入口, E表示出口, #表示墙不能走, .表示空白区域, 可以走. 题目保证给出的迷宫四周都是墙, 而且按照规则走总能找到出口, 且初始方向为向北走,快来帮帮他吧!
每组数据输出两个数, 第一个数表示按照规则走的步数, 第二个数表示走到出口最短需要多少步.
复制
19 5##########.#.#.#.#S.......E#.#.#.#.##########
17 9
好受伤又好激动,一个月了,终于自己独立的写好了一个搜索【泪奔】
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //左前右后
- int n, m, p, q;
- char a[45][45];
- int book[45][45];
- int judge(int x,int y) {
- return (x >= 0 && x < n && y >= 0 && y < m && a[x][y] != '#');
- }
- int dfs(int x, int y, int dir, int step) {
- //dir 0:左 1上 2右 3后
- // x-1,y
- // x,y-1 x,y x,y+1
- // x+1,y
- int tx, ty;
- int next[4][2] = {{0,-1},{-1,0},{0,1},{1,0}};
- for(int k = 0; k < 4; k++) {
- if(x == p && y == q) return (step + 1);
- int ndir = (dir + k + 3) % 4;
- tx = x + next[ndir][0];
- ty = y + next[ndir][1];
- if(!judge(tx,ty)) continue;
- return dfs(tx,ty,ndir,step+1);
- }
- }
- struct node {
- int x;
- int y;
- int dir;
- int step;
- }que[2500];
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--) {
- memset(a,0,sizeof(a));
- int startx, starty;
- scanf("%d%d",&m,&n);
- for(int i = 0; i < n; i++) {
- getchar();
- for(int j = 0; j < m; j++) {
- a[i][j] = getchar();
- if(a[i][j] == 'S') {
- startx = i;
- starty = j;
- }
- if(a[i][j] == 'E') {
- p = i;
- q = j;
- }
- }
- }
- int step = dfs(startx,starty,1,0);
- printf("%d ",step);
- /****************hualidefengexian*****************/
- memset(que,0,sizeof(que));
- memset(book,0,sizeof(book));
- int head, tail;
- head = tail = 1;
- book[startx][starty] = 1;
- que[tail].x = startx;
- que[tail].y = starty;
- que[tail].dir = 0;
- que[tail].step = 0;
- tail++;
- int flag = 0;
- int next[4][2] = {{0,-1},{-1,0},{0,1},{1,0}};
- while(head < tail) {
- for(int k = 0; k < 4; k++) {
- int ndir = (que[head].dir + k + 3) % 4;
- int tx = que[head].x + next[ndir][0];
- int ty = que[head].y + next[ndir][1];
- if(judge(tx,ty) && book[tx][ty] == 0) {
- book[tx][ty] = 1;
- que[tail].x = tx;
- que[tail].y = ty;
- que[tail].dir = ndir;
- que[tail].step = que[head].step + 1;
- tail++;
- }
- if(tx == p && ty == q) {
- flag = 1;
- break;
- }
- }
- if(flag == 1) break;
- head++;
- }
- printf("%d\n",que[tail-1].step + 1);
- }
- return 0;
- }
0 0
- 帅气的HYC迷路了
- qduoj 帅气的HYC迷路了
- 帅气的HYC迷路了 QDU
- 帅气的HYC迷路了(带方向)
- QDU 帅气的HYC迷路了(简单搜索+小小模拟)
- 帅气的HYC的珍珠
- 帅气的HYC切蛋糕
- qduoj31帅气的HYC切蛋糕
- qduoj 帅气的HYC与冰淇淋
- qduoj 帅气的HYC切蛋糕
- qduoj 31 帅气的HYC 切蛋糕
- QDU 帅气的HYC求乘积
- QDUOJ 37 帅气的HYC的珍珠(树状数组)
- qduoj 帅气的HYC的珍珠(树状数组)
- qduoj 帅气的HYC的珍珠(前缀和+思维)
- qduoj 帅气的HYC的珍珠 (树状数组)
- qduoj 30 帅气的HYC求乘积(dfs)
- QDU-帅气的HYC与N皇后(最大独立集)
- hdu 3117 Fibonacci Numbers 数学 矩阵快速幂
- 安装java和Eclipse
- 今日论文笔记
- 应聘一场销售专场的招聘会
- C语言函数名与函数指针详解
- 帅气的HYC迷路了
- <HTML5秘籍>——第五章(音频与视频)
- polys.c
- 动态规划之备忘录法
- boost::barrier同步原理
- 程序、进程、线程的关系
- plot函数参数
- torch平台上利用K-means方法实现SAR图像变化检测
- Android开发---jsoup解析网页的使用方法