炫酷迷宫(C++)

点击做题网站链接

题目描述
小希现在需要你构建一个简单的方格图迷宫,’.'作为路,'x’作为障碍。
要求方格图大小为N*M,起点到终点的最短距离恰好为K。
方格图为四连通,即对于任何一个格子只能上下左右走,相邻格子距离为1,不能走出边界。

输入描述:
一行给出三个整数N,M,K,分别表示需要的方格图的行数,列数和起点到终点的最短距离。
1≤N,M≤1000
1≤K≤N∗M
且保证可以构造出至少一张图使得最短距离为K。

输出描述:
第一行给出起点的坐标xs,ysx_s,y_sxs​,ys​,坐标从1开始。
第二行给出终点的坐标xt,ytx_t,y_txt​,yt​,
第三行开始输出N*M的方格图,N行,M列。
如果有多种方案,输出任意一种即可。

示例1
输入

3 3 5

输出
1 2
3 1

x..
xx.
...

示例2
输入

4 2 3

输出
4 1
2 2

xx
x.
..
.x

示例3
输入

1 10 9

输出
1 1
1 10

..........

题目思路:

比如4*4,K=10的时候,很容易构造出:

....
xxx.
.xx.
....

于是得到了一种绕圈的想法。
但是在比如5*2,K=7中,绕圈法又遇到了阻碍,不如直走换边法,即

.x...
...x.

将这两种方法合并起来,即可以得到一种看起来还不错的解法。
如果能达到和以上算法同等优秀,就可以AC。

解题代码:

#include <iostream>
using namespace std;
char Map[1005][1005];int main()
{std::ios::sync_with_stdio(false);//加速int N,M,K;//方格图的行数,列数和起点到终点的最短距离cin >> N >> M >> K;int startx=1,starty=1,endx=1,endy=1;//先假设起始点和终止点的坐标都为(1,1)//先把整个方格图迷宫全部放上'x'障碍int i,j;for(i=1;i<=N;++i)for(j=1;j<=M;++j)Map[i][j]='x';Map[endx][endy]='.';//把终止点(1,1)放上'.'路,因为终止点一定是路的位置if( N==1 )//方格图迷宫只有1行的情况for(j=2;j<=K+1;++j)//只能横着走{Map[1][j]='.';//把障碍'x'变为路'.'endy++;//终止点所处的列数加1}else if( M==1 )//方格图迷宫只有1列的情况for(i=2;i<=K+1;++i)//只能竖着走{Map[i][1]='.';//把障碍'x'变为路'.'endx++;//终止点所处的行数加1}else if( N==2 )//方格图迷宫只有2行的情况while(K)//直走换边法{if(K) endx++,K--,Map[endx][endy]='.';if(K) endy++,K--,Map[endx][endy]='.';if(K) endy++,K--,Map[endx][endy]='.';if(K) endx--,K--,Map[endx][endy]='.';if(K) endy++,K--,Map[endx][endy]='.';if(K) endy++,K--,Map[endx][endy]='.';}else if( M==2 )//方格图迷宫只有2列的情况while(K)//直走换边法{if(K) endy++,K--,Map[endx][endy]='.';if(K) endx++,K--,Map[endx][endy]='.';if(K) endx++,K--,Map[endx][endy]='.';if(K) endy--,K--,Map[endx][endy]='.';if(K) endx++,K--,Map[endx][endy]='.';if(K) endx++,K--,Map[endx][endy]='.';}else{if( (N/2)*(M-1)<=(M/2)*(N-1) ){while(K){while( endy<M && K ) endy++,K--,Map[endx][endy]='.';//绕圈if(K) endx++,K--,Map[endx][endy]='.';//直走换边法if(K) endx++,K--,Map[endx][endy]='.';//直走换边法while( endy>1 && K ) endy--,K--,Map[endx][endy]='.';//绕圈if(K) endx++,K--,Map[endx][endy]='.';//直走换边法if(K) endx++,K--,Map[endx][endy]='.';//直走换边法}}else{while(K){while( endx<N && K ) endx++,K--,Map[endx][endy]='.';//绕圈if(K) endy++,K--,Map[endx][endy]='.';//直走换边法if(K) endy++,K--,Map[endx][endy]='.';//直走换边法while( endx>1 && K ) endx--,K--,Map[endx][endy]='.';//绕圈if(K) endy++,K--,Map[endx][endy]='.';//直走换边法if(K) endy++,K--,Map[endx][endy]='.';//直走换边法}}}cout << startx << " " << starty << endl;cout << endx << " " << endy << endl;for(i=1;i<=N;++i){for(j=1;j<=M;++j){cout << Map[i][j];}cout << endl;}
}

5C.炫酷迷宫(C++)相关推荐

  1. android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码...

    Android精选源码 Android 炫酷的多重水波纹源码 Android开发一款基于行为识别和个性化推荐的智能推荐APP 仿IT之家Android源码 android判断App位于前台或者后台源码 ...

  2. android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码

    Android精选源码 Android 炫酷的多重水波纹源码 Android开发一款基于行为识别和个性化推荐的智能推荐APP 仿IT之家Android源码 android判断App位于前台或者后台源码 ...

  3. 二十五个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

    文章目录 前文 正文 1.Kaspersky Cyberthreat real-time map 2.Liquid Particles 3D 3.Mikutap 4.Staggering Beauty ...

  4. 好看又炫酷的网页特效例子收集

    1.鼠标点击系列 1.1鼠标点击弹出爱心 <!DOCTYPE html> <html lang="en"> <head><meta cha ...

  5. 送给女友超级炫酷的3D旋转动态图——Python及Matlab代码实现

    目录 1 Python爬取美女照片 3 Matlab动态视频及代码 写在前面 今天这篇文章我准备了很久,但是运行出来很值得. 属于散漫闲谈,毕竟涉及到一个浪漫的思想系统,故建议读者按目录次序逐一浏 ...

  6. android炫酷的自定义view,Android自定义View实现炫酷进度条

    本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...

  7. 如何高效便捷的画出炫酷神经网络图

    目录 1.NN-SVG 2.PlotNeuralNet 3.ConvNetDraw 4.Draw_Convnet 本文介绍几款如何画出炫酷高大上的神经网络图工具,下面是常用的几种工具. 1.NN-SV ...

  8. 如何利用pyecharts绘制炫酷的关系网络图?

    如何利用pyecharts绘制炫酷的关系网络图 这是本学期在大数据哲学与社会科学实验室做的第六次分享了. 第一次分享的是: 如何利用"wordcloud+jieba"制作中文词云? ...

  9. 资源 | 做一款炫酷的机器人需要哪些学习资源(机器人资源Awesome系列)

    翻译 | AI科技大本营 参与 | 赵博 SuiSui 为什么要制作机器人呢?想参加各种机器人大赛?看起来很炫酷?不过从学习角度说,机器人综合了信息技术.电子工程.机械学.程序设计.控制系统以及认知等 ...

最新文章

  1. PHP_define和const的区别/获取所有常量get_defined_constant()
  2. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
  3. mysql用的cap中哪两个_分布式事务CAP定理和BASE理论
  4. 微信小程序瀑布流列表
  5. java 内部类 作用,内部类,java内部类的四大作用
  6. 文件读写’r'和’rb’区别
  7. 如何将GridViewEX升级到UWP(Universal Windows Platform)平台
  8. 狐智、狼道、鹰谋,教你做个聪明的生存者!
  9. Mysql ORDER BY用法的一点理解
  10. 无法使用资源管理器浏览文档库?
  11. MATLAB求解三角函数
  12. Linux 串口读写
  13. 在java中使用RBL服务器(中国反垃圾邮件联盟的CBL+使用)
  14. connection pool exhausted
  15. 2021-07-22 wifi入门综述整理
  16. 学习CSS的background属性及其取值(实践)
  17. MySQL数据清理有技巧,这么破
  18. 水牛城大学本科的计算机专业,PGA学生系列访谈(三):毕业生访谈之我在水牛城的大学时光...
  19. 一款很小巧的桌面窗口隐藏工具
  20. 电路+模电+电力电子基础

热门文章

  1. 使用bop_toolkit渲染自己的ply中face元素的颜色
  2. 小白c语言学习笔记(2)——有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
  3. gorm Preload主子表查询 学习笔记
  4. Chain of Responsibility 模式-----推卸责任模式
  5. java第二课——IDEA介绍
  6. 【java】斐波那契数列
  7. Dynamic Routing Between Capsule中难点理解
  8. 《十一月的肖邦》——麦芽糖
  9. Cisco AP-胖瘦AP的转换
  10. PHP数据加密技术之一---CRYPT()加密