棋盘问题(DFS)& Dungeon Master (BFS)
Input
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
Sample Input
2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1
Sample Output
2
1
简单的dfs
#include<iostream>
#include<stdio.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> PII;
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
//head
int ans,n;
int k;
char a[][];
int vis[];
void dfs(int cur,int e)//cur记录的是目前能放的数目,e是当前的行数
{
if(cur==k)
{
ans++;
return ;
}
if(e==n)
{
return ;
}
for(int i=;i<n;i++)
{
if(!vis[i]&&a[e][i]=='#')
{
vis[i]=;
dfs(cur+,e+);
vis[i]=;
}
}
dfs(cur,e+);
}
int main()
{
ios_base::sync_with_stdio(); cin.tie();
while(cin>>n>>k){
for(int i=;i<n;i++)
vis[i]=;
if(n==-&&k==-)break;
for(int i=;i<n;i++)
cin>>a[i];
ans=;
dfs(,);
cout<<ans<<endl;
}
return ; }
Is an escape possible? If yes, how long will it take?
Input
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
Output
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
Trapped!
Sample Input
3 4 5
S....
.###.
.##..
###.# #####
#####
##.##
##... #####
#####
#.###
####E 1 3 3
S##
#E#
### 0 0 0
Sample Output
Escaped in 11 minute(s).
Trapped!
题意;三维的迷宫,求宗S走到E的最短路径
题解:简单的BFS,但要注意方向由四个变为六个,还有ans要赋初值(因为这个WA了好多发),其他的代码上有说
代码:
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> PII;
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
//head
#define INF 0x3f3f3f3f
#define N 35
int n,m,o;
int sx,sy,sz,gx,gy,gz;
int ans=INF;
int vis[N][N][N];
char g[N][N][N];
int dx[]={,,-,,,};//六个方向
int dy[]={,,,-,,};
int dz[]={,,,,-,};
struct mask
{
int x,y,z,step;
mask(){}
mask(int zz,int xx,int yy,int st)//这里的zz,xx,yy要与下文的关系对好
{
z=zz,x=xx,y=yy,step=st;
}
};
queue<mask>q;
bool check(int a,int b,int c){return <=a&&a<o&&<=b&&b<n&&<=c&&c<m;};
int bfs()
{
while(q.size())q.pop();
q.push(mask(sz,sx,sy,));
memset(vis,,sizeof(vis));
vis[sz][sx][sy]=;
while(q.size())
{
mask tmp=q.front();q.pop();//cout<<tmp.z<<" "<<tmp.x<<" "<<tmp.y<<" "<<endl;
if(tmp.z==gz&&tmp.x==gx&&tmp.y==gy)
{
ans=min(ans,tmp.step);
break;
}
for(int i=;i<;i++)
{
int nx=tmp.x+dx[i];
int ny=tmp.y+dy[i];//
int nz=tmp.z+dz[i];
int nstep=tmp.step;//
if(vis[nz][nx][ny]==&&check(nz,nx,ny)&&g[nz][nx][ny]!='#')
{
vis[nz][nx][ny]=;
q.push(mask(nz,nx,ny,nstep+));//cout<<nz<<" "<<nx<<" "<<ny<<" "<<endl;
}
}
}
return ans==INF?-:ans;
}
int main()
{
ios_base::sync_with_stdio(); cin.tie();
while(cin>>o>>n>>m){
if(n+m+o==)break;
for(int i=;i<o;i++)
{
for(int j=;j<n;j++)
{
for(int k=;k<m;k++)
{
cin>>g[i][j][k];
if(g[i][j][k]=='S')
{
sz=i;
sx=j;
sy=k;
}
if(g[i][j][k]=='E')
{
gz=i;
gx=j;
gy=k;
}
}
}
}
/* for(int i=0;i<o;i++){
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
cout<<g[i][j][k];
}cout<<endl;
}cout<<endl;
}*/
ans=INF;//记得这里的ans要赋初值给它
if(bfs()==-)
cout<<"Trapped!"<<endl;
else printf("Escaped in %d minute(s).\n",bfs());
}
return ; }
棋盘问题(DFS)& Dungeon Master (BFS)的更多相关文章
- hdu 2251 Dungeon Master bfs
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17555 Accepted: 6835 D ...
- POJ2251 Dungeon Master —— BFS
题目链接:http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total S ...
- Dungeon Master bfs
time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u POJ 2251 Descriptio ...
- POJ 2251 Dungeon Master (BFS最短路)
三维空间里BFS最短路 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- poj 2251 Dungeon Master (BFS 三维)
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- [poj] Dungeon Master bfs
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- poj 2251 Dungeon Master( bfs )
题目:http://poj.org/problem?id=2251 简单三维 bfs不解释, 1A, 上代码 #include <iostream> #include<cst ...
- POJ2251 Dungeon Master(bfs)
题目链接. 题目大意: 三维迷宫,搜索从s到e的最小步骤数. 分析: #include <iostream> #include <cstdio> #include <cs ...
- POJ 2251 Dungeon Master bfs 难度:0
http://poj.org/problem?id=2251 bfs,把两维换成三维,但是30*30*30=9e3的空间时间复杂度仍然足以承受 #include <cstdio> #inc ...
- E - Dungeon Master BFS
[NWUACM] 你被困在一个三维的空间中,现在要寻找最短路径逃生!空间由立方体单位构成你每次向上下前后左右移动一个单位需要一分钟你不能对角线移动并且四周封闭是否存在逃出生天的可能性?如果存在,则需要 ...
随机推荐
- 【学习总结】GirlsInAI ML-diary day-21-初识 Numpy, Matplotlib, Seanborn [柱状图、折线图、箱图]
[学习总结]GirlsInAI ML-diary 总 原博github链接-day21 初识 Numpy, Matplotlib, Seanborn [柱状图.折线图.箱图] 一.Titanic练习赛 ...
- 系统INIT 启动脚本的结构/etc/rc.d/init.d/*
- Vue-cli3 环境的搭建
Vue-cli3 环境的搭建 准备 浏览器插件:Vue.js devtools VsCode 和 VsCode 插件 WebStorm Nodejs vue-cli git 起飞 安装vue-cli3 ...
- Java8 stream基础
List<Integer> list = new ArrayList<Integer>(); list.add(2); list.add(4); list.add(0); li ...
- HTML5 canvas绘制图形
demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- webdriver原理
WebDriver 安装C/S构架设计的: 代码(客户端)--->驱动(解析代码)----->浏览器(服务端) 代码通过http请求发给浏览器驱动,驱动解析代码把他们发给浏览器,浏览器执行 ...
- NOSQL导图
- Autoit3域用户的登陆统计
#include <ACN_NET.au3> If @OSArch="X86" Then $fileURL=@CommonFilesDir & "\S ...
- C#正则表达式将html代码中的所有img标签提取
/// <summary> /// 取得HTML中所有图片的 URL. /// </summary> /// <param name="sHtmlText&qu ...
- vue将页面导出成pdf
npm i jspdf-html2canvas prinOut(){ // 导出pdf let page = document.querySelector('.app-main'); // page ...