hdu1240、hdu1253(三维搜索题)

2024-09-09 17:48
文章标签 搜索 三维 hdu1253 hdu1240

本文主要是介绍hdu1240、hdu1253(三维搜索题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、从后往前输入,(x,y,z);

2、从下往上输入,(y , z, x);

3、从左往右输入,(z,x,y);

hdu1240代码如下:

#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>#define N 15
#define eps 1e-9
#define P system("pause")
using namespace std;
struct node{int x,y,z;int step;       
};
int n;
char a[N][N][N];
int vis[N][N][N];
int sx,sy,sz,ex,ey,ez;
int d[6][3]={{1,0,0},{-1,0,0},{0,-1,0},{0,1,0},{0,0,1},{0,0,-1}};
queue<node> q;int bfs()
{while(!q.empty()){node u=q.front();// printf("%d %d %d\n",u.x,u.y,u.z);q.pop();if(u.x==ex&&u.y==ey&&u.z==ez) return u.step;for(int i=0;i<6;i++){int nx=u.x+d[i][0];int ny=u.y+d[i][1];int nz=u.z+d[i][2];if(nx>=0&&nx<n && ny>=0&&ny<n && nz>=0&&nz<n && !vis[nx][ny][ny]&&a[nx][ny][nz]!='X'){node v;v.x=nx;v.y=ny;v.z=nz;v.step=u.step+1;vis[nx][ny][nz]=1;q.push(v);                                                      }        }}    return -1;
} int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);ccchar s[20];int i,j;while(scanf("%s",&s)!=EOF){while(!q.empty()) q.pop();                              scanf("%d",&n);for(int i=0;i<n;i++)                  //三维数组的输入(从下往上输入) for(int j=0;j<n;j++)scanf("%s",a[i][j]);// scanf("%d%d%d%d%d%d",&sx,&sy,&sz,&ex,&ey,&ez);      //习惯上的(x,y,z)  变成了实际中的(y,z,x)scanf("%d%d%d%d%d%d",&sz,&sy,&sx,&ez,&ey,&ex);        //注意点,关键 scanf("%s",s);memset(vis,0,sizeof(vis));vis[sx][sy][sz]=1;        node u;u.x=sx;u.y=sy;u.z=sz;u.step=0;q.push(u);int k=bfs();if(k==-1) printf("NO ROUTE\n");else printf("%d %d\n",n,k);                          }                         //P;                               return 0;    
}



hdu1253代码如下:

#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>#define eps 1e-9
#define N  55
#define P system("pause")
using namespace std;
int a,b,c,T;
int vis[N][N][N] ;
int d[6][3]={{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}};
struct node{int x,y,z;int step;       
};
queue<node> q;
int bfs()
{node u,v;while(!q.empty()) {u=q.front();q.pop();// cout<<u.x<<" "<<u.y<<" "<<u.z<<" "<<u.step<<endl;if(u.x==a-1 && u.y==b-1 &&u.z==c-1) return u.step;if(u.step>=T) return -1;for(int i=0;i<6;i++){int nx=u.x+d[i][0];int ny=u.y+d[i][1];int nz=u.z+d[i][2];if(!vis[nx][ny][nz]&&nx>=0&&nx<a&&ny>=0&&ny<b&&nz>=0&&nz<c){vis[nx][ny][nz]=1;v.x=nx;v.y=ny;v.z=nz;v.step=u.step+1;q.push(v);                                                          }}}    return -1;
}int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);ccint t;scanf("%d",&t);while(t--){while(!q.empty())  q.pop();      scanf("%d%d%d%d",&a,&b,&c,&T);int i,j,k;for(i=0;i<a;i++)for(j=0;j<b;j++)for(k=0;k<c;k++)scanf("%d",&vis[i][j][k]);   //从后往前输入node u;u.x=u.y=u.z=u.step=0;vis[0][0][0]=1;q.push(u);int z=bfs();printf("%d\n",z);      }                     //  P;                               return 0;    
}


这篇关于hdu1240、hdu1253(三维搜索题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151852

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

Rhinoceros 8 for Mac/Win:重塑三维建模边界的革新之作

Rhinoceros 8(简称Rhino 8),作为一款由Robert McNeel & Assoc公司开发的顶尖三维建模软件,无论是对于Mac还是Windows用户而言,都是一款不可多得的高效工具。Rhino 8以其强大的功能、广泛的应用领域以及卓越的性能,在建筑设计、工业设计、产品设计、三维动画制作、科学研究及机械设计等多个领域展现出了非凡的实力。 强大的建模能力 Rhino 8支持多种建