版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41117236/article/details/82924528
【...】
简单搜索题。
【题目】
【思路】
类似八皇后问题但是比八皇后简单的dfs问题。
【代码】
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define mem(a) memset(a,0,sizeof(a))
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=1e6;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
int n,k,ans;
char c,vis[10][10],f[10];
void dfs(int x,int step)
{
if(step==k)
{
ans++; return;
}
if(x>n) return;
for(int y=1;y<=n;y++)
{
if(!vis[x][y]&&!f[y])
{
f[y]=1;
dfs(x+1,step+1);
f[y]=0;
}
}
dfs(x+1,step);
}
main()
{
while(~scanf("%d%d",&n,&k))
{
mem(vis); mem(f);
if(n==-1&&k==-1) break;
go(i,1,n)
go(j,1,n)
{
scanf(" %c",&c);
if(c=='.') vis[i][j]=1;
}
ans=0; dfs(1,0);
printf("%d\n",ans);
}
}
【题目】
【思路】
三维迷宫问题。
【代码】
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define mem(a,b) memset(a,b,sizeof(a))
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int maxn=10000;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
struct p{
int x,y,z,step;
}f,ff;
int dir[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
int n,m,r,sx,sy,sz,ex,ey,ez;
char a[35][35][35];
int b[35][35][35];
bool check(p a)
{
if(a.x>=0&&a.x<n&&a.y>=0&&a.y<m&&a.z>=0&&a.z<r) return true;
return false;
}
int bfs()
{
queue <p> q; while(!q.empty()) q.pop();
f.x=sx,f.y=sy,f.z=sz,f.step=0;
b[f.x][f.y][f.z]=1;
q.push(f);
while(!q.empty())
{
f=q.front(); q.pop();
if(f.x==ex&&f.y==ey&&f.z==ez) return f.step;
go(i,0,5)
{
ff.x=f.x+dir[i][0];
ff.y=f.y+dir[i][1];
ff.z=f.z+dir[i][2];
if(a[ff.x][ff.y][ff.z]!='#'&&check(ff)&&b[ff.x][ff.y][ff.z]==0)
{
b[ff.x][ff.y][ff.z]=1;
ff.step=f.step+1;
q.push(ff);
}
}
}
return -1;
}
main()
{
while(~scanf("%d%d%d",&n,&m,&r))
{
if(n==0&&m==0&&r==0) break;
mem(a,'\0'); mem(b,0);
go(i,0,n-1)
{
go(j,0,m-1)
{
scanf("%s",a[i][j]);
go(k,0,r-1)
{
if(a[i][j][k]=='S') sx=i,sy=j,sz=k;
else if(a[i][j][k]=='E') ex=i,ey=j,ez=k;
}
}
}
int ans=bfs();
if(ans==-1) puts("Trapped!");
else printf("Escaped in %d minute(s).\n",ans);
}
}