zoukankan      html  css  js  c++  java
  • hdu 1242 Rescue(BFS入门)

    第一次用容器做的BFS题目,题目有个地方比较坑,就是遍历时的方向,比如上下左右能AC,右上左下就WA

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <queue>
    using namespace std;
    char map[205][205];
    int x_begin,y_begin,flag,n,m;
    int v[205][205],d[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };
    struct node
    {
        int x;
        int y;
        int step;
    };
    void bfs()
    {
        queue <node> q;
        node s,temp;
        s.x = x_begin;
        s.y = y_begin;
        s.step = 0;
        v[x_begin][y_begin] = 0;
        q.push(s);
        while(!q.empty())
        {
            temp = q.front();
            q.pop();
            if(map[temp.x][temp.y] == 'r')
            {
                printf("%d
    ",temp.step);
                flag = 1;
                return ;
            }
            for(int i = 0 ; i < 4 ; i ++)
            {
                s = temp;//temp为本次遍历的结点
                s.x += d[i][0];
                s.y += d[i][1];
                if(s.x >= 0 && s.x < n && s.y >= 0 && s.y < m && map[s.x][s.y] != '#')
                {
                    if(map[s.x][s.y] == 'x')//杀一个守卫时间+2
                        s.step += 2;
                    else
                        s.step ++;
                    if(v[s.x][s.y] >= s.step)
                    {
                        v[s.x][s.y] = s.step;
                        q.push(s);
                    }
                }
            }
        }
    }
    int main()
    {
        int i,j;
        while(~scanf("%d%d",&n,&m))
        {
            for(i = 0 ; i < n ; i ++)
            {
                scanf("%s",map[i]);
                for(j = 0 ; j < m ; j ++)
                if(map[i][j] == 'a')
                {
                    x_begin = i;
                    y_begin = j;
                }
            }
            memset(v,1,sizeof(v));
            flag = 0;
            bfs();
            if(!flag)
              printf("Poor ANGEL has to stay in the prison all his life.
    ");
        }
        return 0;
    }
    


  • 相关阅读:
    foreach和each
    one
    存储
    动态添加
    百度描点
    php环境配置
    图文并茂
    css实现鼠标移上去变大,旋转,转别人的额
    vagrant box打包前的准备
    VirtualBox压缩打包
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3177997.html
Copyright © 2011-2022 走看看