hdu 1242 (深搜)

题意:天使被困在监狱,他的朋友们想见他,监狱的地形复杂,包括路(用点标示),墙(用#标示),天使的位置(用a标示),他的朋友(用r标示),监狱里还有守卫(用x标示),他的朋友只能向左右上下四个方向走,走以不花一单位时间,若碰上守卫,消灭守卫需要额外花费一单位时间。问最少多长时间天使能见到他的朋友。

本题需要注意的是,天使的朋友可能不只一个,所以,应该从天使的位置开始搜去找其朋友就可以了。

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <cmath>
#define N 220
using namespace std;
char a[N][N];
int vis[N][N];
int n,m, sx, sy;
int ans, flag;
int path[4][2] = {{1,0},{0,1},{0,-1},{-1,0}};
/**
本题需要注意的是,天使的朋友可能不只一个,所以,应该从天使的位置开始搜去找其朋友就ok了。
*/
int check(int x, int y)
{
    if(x < 0 || x >= n || y < 0 || y >= m) return 0;
    if(a[x][y] == '#' || vis[x][y]) return 0;
    return 1;
}
void dfs(int x, int y, int cnt)
{
    if(cnt > ans) return; //剪枝
    if(a[x][y] == 'r' && cnt < ans)
    {
        ans = cnt;
        flag = 1;
        return;
    }
    for(int i = 0;i < 4;i++)
    {
        int nx = x + path[i][0];
        int ny = y + path[i][1];
        if(check(nx, ny))
        {
            vis[nx][ny] = 1;
            if(a[nx][ny] == 'x')
                dfs(nx, ny, cnt+2);
            else dfs(nx, ny, cnt+1);
            vis[nx][ny] = 0;
        }
    }
}
int main()
{
    while(~scanf("%d%d", &n,&m))
    {


        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                scanf(" %c", &a[i][j]);
                if(a[i][j] == 'a')
                {
                    sx = i; sy = j;
                }
            }
        }
        ans = 0xfffff;
        flag = 0;
        vis[sx][sy] = 1;
        dfs(sx, sy, 0);
        if(flag)
            printf("%d\n", ans);
        else printf("Poor ANGEL has to stay in the prison all his life.\n");
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值