Asteroids!_poj2225
这是一个立方体的空间的路径搜索问题,若可达输出步数,不可达输出“NO ROUTE”
一道……课后题
输入的话我是按字符输入这个空间的
然后普通的bfs,一个方向数组,一个空间数组(因为只用一次,懒的再开一个,反正标记了,就是不能走的意思)引入某大佬的函数返回值做条件判重
需要注意的是,注意它的空间x,y,z轴分别怎么表示,我是通过建模型搞的(肯定有简单的方法)
下面是代码(西加加)
#include <iostream>
#include <string>
#include <queue>
#include <cstdio>
using namespace std;
bool mapp[10][10][10];
int a,b,c,d,e,f,n;
int dir[6][3]={{0,0,1},{0,1,0},{0,0,-1},{0,-1,0},{1,0,0},{-1,0,0}};
struct point{
int x,y,z,step;
point(int xx,int yy,int zz,int ss=0):x(xx),y(yy),z(zz),step(ss){}
point(){}
};
bool judge(point ipo){//区分或与与
if(ipo.x>=n||ipo.x<0)return 0;
if(ipo.y>=n||ipo.y<0)return 0;
if(ipo.z>=n||ipo.z<0)return 0;
if(mapp[ipo.z][ipo.y][ipo.x]==1)return 0;
return 1;
}
int bfs(){
queue<point>que;
que.push(point(a,b,c));
point now;
int tstep;
while(!que.empty()){
now=que.front();
que.pop();
if(now.x==d&&now.y==e&&now.z==f){
return now.step;
}
//if(judge(now)){mapp[now.z][now.y][now.x]=1; }
mapp[now.z][now.y][now.x]=1;
int tx,ty,tz;
tstep=now.step+1;
for(int t=0;t<6;t++){
tx=now.x+dir[t][2];
ty=now.y+dir[t][1];
tz=now.z+dir[t][0];
if(judge(point(tx,ty,tz)))que.push(point(tx,ty,tz,tstep));//判断次数相等,插入删除次数少
}
}
return -1;
}
int main()
{
string str;
int i,j,k;
char ch;
while(cin >> str >> n){
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
mapp[i][j][k]=0;
getchar();
for(i=0;i<n;i++){
for(j=0;j<n;j++){
for(k=0;k<n;k++){
ch=getchar();
if(ch=='X')mapp[i][j][k]=1;
}
getchar();
}
}
scanf("%d%d%d",&a,&b,&c);
scanf("%d%d%d",&d,&e,&f);
int ans=bfs();
cin >> str;
if(ans==-1)cout << "NO ROUTE" << endl;
else cout << n << ' ' << ans << endl;
}
return 0;
}
//对应关系
//x y z
//k j i
//a b c
//d e f
Asteroids!_poj2225的更多相关文章
- POJ 3041 Asteroids
最小点覆盖数==最大匹配数 Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12678 Accepted: ...
- Asteroids(匈牙利算法入门)
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16211 Accepted: 8819 Descri ...
- hdu 1240:Asteroids!(三维BFS搜索)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- POJ 3041 Asteroids(最小点覆盖集)
Asteroids Time Limit: 1000MS Mem ...
- Asteroids (最小覆盖)
题目很简单,但是需要推到出二分图最大匹配 = 最小覆盖 最小覆盖:证明过程http://blog.sina.com.cn/s/blog_51cea4040100h152.html Descriptio ...
- poj 3041 Asteroids(最小点覆盖)
http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- poj 3041 Asteroids (最大匹配最小顶点覆盖——匈牙利模板题)
http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- HDU-1240 Asteroids! (BFS)这里是一个三维空间,用一个6*3二维数组储存6个不同方向
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...
- POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...
随机推荐
- kuangbin专题 专题九 连通图 Network UVA - 315
题目链接:https://vjudge.net/problem/UVA-315 题目:求割点. #include <iostream> #include <cstdio> #i ...
- 闲来无事.gif
- java的动态绑定和多态
public class Shape { public void area() { System.out.println("各种形状的面积..."); } public stati ...
- 10day 系统安全优化
系统安全相关优化(将一些安全服务进行关闭) 1. 防火墙服务程序 centos6 查看防护墙服务状态 /etc/init.d/iptables status 临时关闭防火墙服务 /etc/init.d ...
- SpringMvc中文件的上传
本文转自:http://www.cnblogs.com/fjsnail/p/3491033.html 三个方法没有都测试,先get再说 第一个方法慢不知道是不是因为写的代码是按字节读取的,没有用Buf ...
- XFire客户端调用CXF服务端(四)
前面章节:http://www.cnblogs.com/xiehongwei/p/8082337.html 已经开发出了CXF服务端,现在用XFire开发客户端调用CXF服务端,代码如下: impor ...
- Win10-IIS注册asp 此操作系统版本不支持此选项 错误解决方法
现象再现: 今日在Win10上面ASP.NET网站突然不能跑了, 过程再现: 根据资料提示重新注册ASPNET_IIS.exe -i 直接提示: C:\WINDOWS\system32>c:\w ...
- Python - metaclass元类(图)
个人总结
- 排序算法大荟萃——希尔(Shell)排序算法
1.基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为d1的倍数的记录放在同一个组中.先再各族中进行直接插入排序,然后取第二个增量d2<d1重复上述的分组 ...
- 记一次深坑,dubbo暴露的服务无法注册到zookeeper的原因
项目用的架构,springboot,dubbo,zookeeper dubbo的provider作为服务单独使用,里面的service实现类使用了@Transactional注解,想集成spring的 ...