zoukankan      html  css  js  c++  java
  • HDU_1242_Rescue

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1242

    大意:迷宫搜索,'#'代表墙,'.'代表路,'x'代表守卫,每移动1格用1秒,杀死守卫用1秒,angel('a'表示)的朋友(用'r'表示),要去救她,问最短时间为多少?

    分析:迷宫搜索,dfs

    总结:注意读题,之前做的时候以为只有一个朋友,其实有多个,所以用'a'去找'r'比较方便。注意输入,之前输入也有错误。

    代码:

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<cstdio>
    using namespace std;
    #define N 205
    #define INF 0x7ffffff
    
    int n,m,minx;
    int ex,ey;
    char map[N][N];
    bool vis[N][N];
    int dir[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
    
    bool inside(int x,int y)
    {
        if(x>=0&&x<m&&y>=0&&y<n)
            return 1;
        return 0;
    }
    
    void dfs(int x,int y,int time)
    {
        if(map[x][y]=='r')
        {
            if(time<minx)
                minx=time;
            return;
        }
        if(map[x][y]=='#')
            return;
        if(time>minx)
            return;
        if(!inside(x,y))
            return;
        if(vis[x][y])
            return;
        vis[x][y]=1;
        for(int i=0; i<4; i++)
        {
            int mx=x+dir[i][0];
            int my=y+dir[i][1];
            if(map[mx][my]=='x')
                dfs(mx,my,time+2);
            else
                dfs(mx,my,time+1);
        }
        vis[x][y]=0;
    }
    
    int main()
    {
        int sx,sy;
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            memset(vis,0,sizeof(vis));
            minx=INF;
            for(int i=0;i<m;i++)
                scanf("%s",map[i]);
            for(int i=0; i<m; i++)
                for(int j=0; j<n; j++)
                    if(map[i][j]=='a')
                    {
                        sx=i;
                        sy=j;
                    }
            //for(int i=0; i<m; i++)
              //  printf("%s
    ",map[i]);
            dfs(sx,sy,0);
            if(minx==INF)
                printf("Poor ANGEL has to stay in the prison all his life.
    ");
            else
                printf("%d
    ",minx);
        }
        return 0;
    }
  • 相关阅读:
    c# 中的线程和同步
    Javascript 观察者模式
    连接SQLite 创建ADO.net实体类
    给软件增加注册功能 c#
    log4net 使用步骤
    C# 操作 Excel
    PCL编译历程
    设计模式
    kinect
    eclipse配置servlet错误
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/4798975.html
Copyright © 2011-2022 走看看