博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CDZSC_2015寒假新人(4)——搜索 - D
阅读量:4698 次
发布时间:2019-06-09

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

Description

You're in space. 
You want to get home. 
There are asteroids. 
You don't want to hit them. 
 

Input

Input to this problem will consist of a (non-empty) series of up to 100 data sets. Each data set will be formatted according to the following description, and there will be no blank lines separating data sets. 
A single data set has 5 components: 
Start line - A single line, "START N", where 1 <= N <= 10. 
Slice list - A series of N slices. Each slice is an N x N matrix representing a horizontal slice through the asteroid field. Each position in the matrix will be one of two values: 
'O' - (the letter "oh") Empty space 
'X' - (upper-case) Asteroid present 
Starting Position - A single line, "A B C", denoting the <A,B,C> coordinates of your craft's starting position. The coordinate values will be integers separated by individual spaces. 
Target Position - A single line, "D E F", denoting the <D,E,F> coordinates of your target's position. The coordinate values will be integers separated by individual spaces. 
End line - A single line, "END" 
The origin of the coordinate system is <0,0,0>. Therefore, each component of each coordinate vector will be an integer between 0 and N-1, inclusive. 
The first coordinate in a set indicates the column. Left column = 0. 
The second coordinate in a set indicates the row. Top row = 0. 
The third coordinate in a set indicates the slice. First slice = 0. 
Both the Starting Position and the Target Position will be in empty space. 
 

Output

For each data set, there will be exactly one output set, and there will be no blank lines separating output sets. 
A single output set consists of a single line. If a route exists, the line will be in the format "X Y", where X is the same as N from the corresponding input data set and Y is the least number of moves necessary to get your ship from the starting position to the target position. If there is no route from the starting position to the target position, the line will be "NO ROUTE" instead. 
A move can only be in one of the six basic directions: up, down, left, right, forward, back. Phrased more precisely, a move will either increment or decrement a single component of your current position vector by 1. 
 

Sample Input

START 1O0 0 00 0 0ENDSTART 3XXXXXXXXXOOOOOOOOOXXXXXXXXX0 0 12 2 1ENDSTART 5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO0 0 04 4 4END

  

 

Sample Output

1 03 4NO ROUTE

  

 题解:BFS。题目很好理解。详见代码。
 
1 #include 
2 #include
3 #include
4 using namespace std; 5 6 const int MAX = 16; 7 const int x[] = { -1, 0, 1, 0, 0, 0 }; 8 const int y[] = { 0, 1, 0, -1, 0, 0 }; 9 const int z[] = { 0, 0, 0, 0, -1, 1 };10 char arr[MAX][MAX][MAX];11 bool vis[MAX][MAX][MAX];12 13 struct POINT{14 int x, y, z, s;15 };16 17 int BFS(POINT s, POINT e, int n)18 {19 POINT nx, t;20 memset(vis, 0, sizeof(vis)); vis[s.z][s.y][s.x] = true;21 queue
qu;22 qu.push(s);23 while(!qu.empty())24 {25 nx = qu.front(); qu.pop();26 if(nx.x == e.x && nx.y == e.y && nx.z == e.z)27 {28 return nx.s;29 }30 for(int i = 0; i < 6; i++)31 {32 t.x = nx.x + x[i]; t.y = nx.y + y[i]; t.z = nx.z + z[i];33 if((t.x >= 0 && t.x < n) && (t.y >= 0 && t.y < n) && (t.z >= 0 && t.z < n) && !vis[t.z][t.y][t.x] && arr[t.z][t.y][t.x] == 'O')34 {35 vis[t.z][t.y][t.x] = true;36 t.s = nx.s + 1;37 qu.push(t);38 }39 }40 }41 return -1;42 }43 44 int main()45 {46 #ifdef CDZSC_OFFLINE47 freopen("in.txt", "r", stdin);48 freopen("out.txt", "w", stdout);49 #endif50 int n, ans;51 char str[32];52 POINT s, t;53 while(~scanf("%s", str) && str[0] == 'S')54 {55 scanf("%d", &n);56 memset(arr, 0, sizeof(arr));57 for(int i = 0; i < n; i++)58 {59 for(int j = 0; j < n; j++)60 {61 scanf("%s", arr[i][j]);62 }63 }64 scanf("%d%d%d%d%d%d", &s.x, &s.y, &s.z, &t.x, &t.y, &t.z); s.s = 0;65 ans = BFS(s, t, n);66 if(ans == -1)67 {68 printf("NO ROUTE\n");69 }70 else71 {72 printf("%d %d\n", n, ans);73 }74 scanf("%s", str);75 }76 return 0;77 }
View Code

 

 

 

转载于:https://www.cnblogs.com/LiuACG/p/4253939.html

你可能感兴趣的文章
LeetCode-Recover Binary Search Tree
查看>>
Socket
查看>>
opencv 在工业中的应用:blob分析
查看>>
JavaScript Cookie
查看>>
JAVA中protected的作用
查看>>
selenium python 启动Chrome
查看>>
MySQL优化索引及优化汉字模糊查询语句
查看>>
安装cocoaPod 的问题
查看>>
vs Obsolete标识符
查看>>
IOS 深拷贝和浅拷贝应用
查看>>
深度学习优化方法
查看>>
《剑指offer》第二十八题(对称的二叉树)
查看>>
解决编译错误: 非法字符: '\ufeff' 解决方案|错误: 需要class, interface或enum
查看>>
别说我不懂排序!几种常见排序算法(一)
查看>>
JAVA学习笔记-this隐式参数
查看>>
2017.05.01
查看>>
Oracle闪回技术
查看>>
Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
查看>>
kotlin项目开发基础之gradle初识
查看>>
poj_1458 LCS problem F.最长上升公共子序列
查看>>