以寻路的思想解决算法问题
来源:互联网 发布:吉他视频教学软件 编辑:程序博客网 时间:2024/06/04 19:03
以寻路的思想解决算法问题
背景:最近有人让我帮忙做道面试题,游戏公司的,想了想可以用游戏中寻路的思维,或许可以提高他成功的机会。
根据输入列数输出上图效果,有兴趣的童鞋可以试试,主要是以比较有趣模拟寻路的方式实现上述效果,应了那句柳暗花明又一村,问题也变得有趣起来了。
说一下思路:从1到最大值就像一条路径一样,从1开始走,一直绕圈朝里走到终点,意会~
直接上代码
enter code hereusing UnityEngine; using System.Collections; using System.Text; public class TestSqFun :MonoBehaviour{ //数据容器 public int[,] arry; //终点值 [Header("最大值")] public int max; //看规律分为几种前进类型 int style=0; [Header("输入")] public int value; void Start() { Cal(value); } void Cal(int input) { //初始化 InitializePath(input); //开始赋值 CalculateNode(input); //输出 PrintArry(input); } /// <summary> /// 初始化,计算最大值,并把空白标出设为不可走区域 /// </summary> /// <param name="index">输入</param> private void InitializePath(int index) { arry = new int[index,index]; for (int i = 0; i < index; i++) { for (int j = 0; j < i; j++) { arry[i, j] = -1; max++; } } max = arry.Length - max; } /// <summary> /// 数据赋值 /// </summary> /// <param name="index"></param> private void CalculateNode(int index) { int X = index - 1; int Y = index - 1; arry[X, Y] = 1; style = 0; for (int i = 0; i < arry.Length; i++) { style = (i/(index-1))%3; //到达目标 if (arry[X, Y].Equals(max)) { break; } //记录上一次位置信息 int lastNode = arry[X, Y]; //出发 ClaMoveStyle(true,ref X, ref Y); //已经被覆盖 if (!arry[X, Y].Equals(0)|| arry[X, Y].Equals(-1)) { //禁止覆盖区域(空白) ClaMoveStyle(false, ref X, ref Y); continue; } //覆盖新区域 arry[X, Y] = lastNode+1; } } /// <summary> /// 根据类型,计算前进或者原地 /// </summary> /// <param name="canMove">前进或者退回原地</param> /// <param name="currnetX">当前坐标x</param> /// <param name="currentY">当前坐标y</param> private void ClaMoveStyle(bool canMove,ref int currnetX,ref int currentY) { switch (style) { case 0: if (canMove) { currnetX--; } else { currnetX++; } break; case 1: if (canMove) { currentY--; } else { currentY++; } break; case 2: if (canMove) { currnetX++; currentY++; } else { currnetX--; currentY--; } break; default: break; } } /// <summary> /// 输出 /// </summary> /// <param name="index"></param> private void PrintArry(int index) { StringBuilder str = new StringBuilder(); for (int i = 0; i < index; i++) { StringBuilder temp = new StringBuilder(); for (int j = 0; j < index; j++) { //將-1恢復空白 //为了制表格式 if (arry[i, j].Equals(-1)) { temp.Append("\t"); } else { temp.Append(arry[i, j]+"\t"); } } str.AppendLine(temp.ToString()); } SaveFile(str.ToString()); } /// <summary> /// 保存文件 /// </summary> /// <param name="data"></param> private void SaveFile(string data) { System.IO.FileStream fStream = new System.IO.FileStream("Assets/data.xlsx", System.IO.FileMode.OpenOrCreate); byte[] bytes = System.Text.ASCIIEncoding.UTF8.GetBytes(data); fStream.Write(bytes,0,bytes.Length); fStream.Close(); } }
抛砖引玉欢迎大家讨论!
阅读全文
0 0
- 以寻路的思想解决算法问题
- 分治算法思想解决找假硬币的问题
- 以前端架构师的思想看问题:解决单页应用,系统角色请求抢占session发送请求问题
- 算法思想 -- 贪心算法(2) -- 需解决的2个主要问题
- 以另一种位图的思想来解决一道OJ题目
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- 用回溯的思想解决排列问题
- 栈的思想解决火车出站问题
- 递归思想解决汉诺塔的问题
- 典型递归的思想解决汉诺塔问题
- 浅谈以数据结构的视角去解决算法问题的步骤
- 算法——递归思想解决排列组合问题
- 动态规划算法思想解决找零钱问题
- 回溯法算法思想解决最小机器重量设计问题
- 指针引发的问题(以解决)
- BloomFilter–大规模数据处理利器(解决空查问题)(包含BloomFilter算法思想的演变:实例4)
- 0046算法笔记——【随机化算法】舍伍德随机化思想解决跳跃表问题
- 0046算法笔记——【随机化算法】舍伍德随机化思想解决跳跃表问题
- IIS下带中文搜索的问题
- Spring学习——Spring中定时器实现
- MySQL主从复制与读写分离
- 某政务网站性能优化
- Oracle to create table、sequences、index and view --- cxl
- 以寻路的思想解决算法问题
- (三)redis常用数据类型 Hashes
- [测试]Jmeter-BeanShell的使用介绍
- activeMQ笑脸计划_message cursor
- struct 结构体 、 union 枚举 及 #pragma pack 字节对齐
- leetcode 207. Course Schedule
- Colleciton集合和Map集合的遍历
- Java线程锁_模拟失效时修改值
- android TextView设置中文字体加粗实现方法