zoukankan      html  css  js  c++  java
  • HDOJ1728 BFS【STL__queue_的应用】

    STL__queue_的应用

    调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + #include<queue>
    详细用法:
    定义一个queue的变量                       queue<Type> que
    查看是否为空范例                              que.empty()    是的话返回1,不是返回0;
    从已有元素后面增加元素(入队)      que.push()
    现有元素的个数                                 que.size()
    显示第一个元素                                 que.front()
    显示最后一个元素                              que.back()
    清除第一个元素 (出队)                  que.pop()

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 #define N 105
     7 using namespace std;
     8 struct node{
     9     int x,y;
    10     int step; 
    11 };
    12 char g[N][N];
    13 int vis[N][N];
    14 int mov[4][2]={0,1,1,0,0,-1,-1,0};
    15 int k,x1,x2,y1,y2;
    16 int n,m;
    17 int bfs(){
    18     queue<node>Q;
    19     node t={x1,y1,-1};
    20     Q.push(t);
    21     vis[x1][y1]=1;
    22     while(!Q.empty()){
    23         t=Q.front();
    24         Q.pop();
    25         //printf("%d %d %d
    ",t.x,t.y,t.step);
    26         if(t.x==x2 && t.y==y2 && t.step<=k) return 1;
    27         t.step;
    28         for(int i=0;i<4;i++){
    29             node tt=t;
    30             tt.step++;
    31             tt.x+=mov[i][0];
    32             tt.y+=mov[i][1];
    33             while(tt.x>0 && tt.x<=n && tt.y>0 & tt.y<=m && g[tt.x][tt.y]!='*' ){
    34                 if(!vis[tt.x][tt.y]){
    35                     vis[tt.x][tt.y]=1;
    36                     Q.push(tt);
    37                 }
    38                 tt.x+=mov[i][0];
    39                 tt.y+=mov[i][1];
    40             }
    41         }
    42     }  
    43     return 0;
    44 }
    45 
    46 int main(){
    47     int t;
    48     scanf("%d",&t);
    49     while(t--){
    50         memset(vis,0,sizeof(vis));
    51         scanf("%d%d",&n,&m);
    52         for(int i=1;i<=n;i++)
    53             scanf("%s",g[i]+1);
    54         scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2);
    55         if(bfs()) 
    56             puts("yes");
    57         else
    58          puts("no");
    59     }
    60     return 0;
    61 }

    逃离迷宫

    Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 9   Accepted Submission(s) : 1

    Font: Times New Roman | Verdana | Georgia

    Font Size:

    Problem Description

      给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍, 她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什 么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的。我们假定给定的两个位置都是空地,初始时,gloria所面向的方向未定,她可以 选择4个方向的任何一个出发,而不算成一次转弯。gloria能从一个位置走到另外一个位置吗?

    Input

      第1行为一个整数t (1 ≤ t ≤ 100),表示测试数据的个数,接下来为t组测试数据,每组测试数据中,
      第1行为两个整数m, n (1 ≤ m, n ≤ 100),分别表示迷宫的行数和列数,接下来m行,每行包括n个字符,其中字符'.'表示该位置为空地,字符'*'表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为5个整数k, x1, y1, x2, y2 (1 ≤ k ≤ 10, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),其中k表示gloria最多能转的弯数,(x1, y1), (x2, y2)表示两个位置,其中x1,x2对应列,y1, y2对应行。

    Output

      每组测试数据对应为一行,若gloria能从一个位置走到另外一个位置,输出“yes”,否则输出“no”。

    Sample Input

    2
    5 5
    ...**
    *.**.
    .....
    .....
    *....
    1 1 1 1 3
    5 5
    ...**
    *.**.
    .....
    .....
    *....
    2 1 1 1 3
    

    Sample Output

    no
    yes
  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/3647041.html
Copyright © 2011-2022 走看看