博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5025Saving Tang Monk(BFS)
阅读量:4205 次
发布时间:2019-05-26

本文共 1640 字,大约阅读时间需要 5 分钟。

题意:从K走到T,S为怪,走的时候就多花费一秒,走到T时收集m把不同的钥匙,但是规定收集n之前,必须1~n-1全部收集完毕,怪最多有5个

思路:怪最多就有5个,然后钥匙是1~9把,我们每个点的状态就不会很多,在BFS时每个点的状态进行标记就行了,5个怪状态压缩着判断,因为这个怪在第二次经过的时候已经死了,不用花费时间去杀死它

////  main.cpp//  dfs-bfs搜索////  Created by liuzhe on 16/8/10.//  Copyright © 2016年 my_code. All rights reserved.//#include 
#include
#include
#include
#include
using namespace std;const int maxn=110;const int inf = 0x3f3f3f3f;int sx,sy,ex,ey,n,m,cnt;int dir[4][2]={
{0,1},{0,-1},{1,0},{-1,0}};int vis[maxn][maxn][10][40];char str[maxn][maxn];struct edge{ int x,y,step,numkey,ss;};struct snake{ int x,y;}sna[10];int bfs(){ queue
que; edge c,ne; memset(vis,0,sizeof(vis)); c.x = sx; c.y = sy; c.step = 0; c.numkey = 0; c.ss = 0; vis[c.x][c.y][0][0] = 1; que.push(c); int ans = inf; while(!que.empty()) { c = que.front(); que.pop(); if(c.x==ex&&c.y==ey&&c.numkey==m) ans = min(ans,c.step); for(int i=0;i<4;i++) { int xx = c.x + dir[i][0]; int yy = c.y + dir[i][1]; if(xx<0||xx>n-1||yy<0||yy>n-1||str[xx][yy]=='#') continue; if(vis[xx][yy][c.numkey][c.ss]) continue; ne.x = xx; ne.y = yy; ne.step = c.step+1; ne.numkey = c.numkey; ne.ss = c.ss; if(str[xx][yy]>='1'&&str[xx][yy]<='9')//如果走到的位置是钥匙就进行判断 { int t = str[xx][yy] - '0'; if(ne.numkey==t-1)//钥匙刚好是当前钥匙数+1,就符合条件 { ne.numkey++; vis[ne.x][ne.y][ne.numkey][ne.ss] = 1; que.push(ne); } else//不符合条件直接压进队列 { vis[ne.x][ne.y][ne.numkey][ne.ss] =1; que.push(ne); } } else if(str[xx][yy]=='S')//meet snake,then judge { for(int i=0;i
>i)&1)//说明这个已经死掉了 { vis[ne.x][ne.y][ne.numkey][ne.ss] = 1; que.push(ne); } else//时间加一,状态更新 { ne.step++; ne.ss+=(1<

转载地址:http://kpali.baihongyu.com/

你可能感兴趣的文章
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>
解决Github代码下载慢问题!
查看>>
1.idea中Maven创建项目及2.对idea中生命周期的理解3.pom文件夹下groupId、artifactId含义
查看>>
LeetCode-栈|双指针-42. 接雨水
查看>>
stdin,stdout,stderr详解
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>
登录linux密码验证很慢的解决办法
查看>>
fcntl函数总结
查看>>
HTML条件注释
查看>>
Putty远程服务器的SSH经验
查看>>
内核态与用户态
查看>>
使用mingw(fedora)移植virt-viewer
查看>>
趣链 BitXHub跨链平台 (4)跨链网关“初介绍”
查看>>
C++ 字符串string操作
查看>>
MySQL必知必会 -- 了解SQL和MySQL
查看>>
MySQL必知必会 -- 使用MySQL
查看>>
MySQL必知必会 -- 数据检索
查看>>