一条贪吃的蛇在一个n*m的网格中游走,它只能从一个方格走向另一个相邻的方格,这里相邻的意思是两个方格有公共边。每个方格可以看作是一个房间,其中一些是空的,一些存放有苹果。贪吃的蛇根本不进入空的房间,而进入有苹果的房间后就可以带走所有苹果使房间成为空的。蛇从一个指定的房间出发,最终回到它的家,把一路带来的苹果存储到家中,当然,它希望带来的苹果最多。请编写程序,输入有整数n和m,及n*m的一个矩阵,矩阵元素数值中有一个是 -1,表示蛇的出发位置,有一个是 -2,表示蛇的家的位置,其余数值是非负整数,0表示房间为空,非零整数表示苹果的数目。输出蛇选择的游走路径和获得的最多的苹果数目。

例如输入4*4矩阵:
7 0 4 18
4 0 1 1
15 7 11 -1
0 12 -2 0

则应输出 (2, 3), (1, 3), (0, 3), (0, 2), (1, 2), (2, 2), (2, 1), (3, 1), (3, 2), 带回苹果数为1+18+4+1+11+7+12 = 54。

(本题为2011年ACM大赛题目)。(可查阅:吕国英,任瑞征等编著,算法设计与分析(第2版),清华大学出版社,2009年1月,第200-202页。

提示:这是一个利用回溯算法的迷宫搜索类型问题,可参考类似问题的已有解法。

哈哈,连夜把算法写出来了,跟各位码友分享一下:

// GreedySnake.cpp #include "stdafx.h" #include <iostream> #include <Windows.h> #include <vector> using namespace std; #define M 4 #define N 4 //定义数组元素结构体 struct stElement { int i; int j; int value; }; int apple[M][N] = { 7, -1, 4, 18, 4, 0, 1, 1, 15, 7, 11, 100, 0, 12, -2, 0}; vector<stElement> maxPath;//当前最长路径(路径长度指的是路径上所有苹果的总个数) int maxLen = 0;//最长路径长度 void Snake(vector<stElement> path, int pathLen, int i, int j) { if (apple[i][j] == -2) //如果吃到终点的苹果 { if (pathLen > maxLen) //求最大路径长度 { stElement e; e.i = i; e.j = j; e.value = apple[i][j]; path.push_back(e); maxPath = path; maxLen = pathLen; } return; } else { if (i >= 0 && i < M && j >= 0 && j < N && apple[i][j] != 0 ) { stElement e; e.i = i; e.j = j; e.value = apple[i][j]; path.push_back(e); if (apple[i][j] != -1) pathLen += apple[i][j]; int t = apple[i][j]; apple[i][j] = 0; //将吃掉的苹果置为0,以免重复搜索 Snake(path, pathLen, i+1, j); Snake(path, pathLen, i-1, j); Snake(path, pathLen, i, j-1); Snake(path, pathLen, i, j+1); apple[i][j] = t; //4个方向都搜索完之后一定要将元素恢复原状 } } } int _tmain(int argc, _TCHAR* argv[]) { vector<stElement> path; int i,j,pathLen = 0; stElement e; //找到入口点 for (i = 0; i < M; i++) for (j = 0; j < N; j++) { if (apple[i][j] == -1) { e.i = i; e.j = j; e.value = -1; break; } } Snake(path, pathLen, e.i, e.j); cout<<"the longest path:"<<endl; for (i = 0; i < maxPath.size(); i++) cout<<"("<<maxPath[i].i<<", "<<maxPath[i].j<<")"<<"\t"; cout<<endl; cout<<"带回苹果数为: "<<maxLen<<endl; system("pause"); return 0; }

2011ACM大赛题目之贪吃蛇算法相关推荐

  1. Unity-关于一个3D贪吃蛇的走路算法

    近日在做一个类似于ios手游<贪吃三国>的3D贪吃蛇游戏. 一.移动 在之前的项目中,移动运用的是Unity的AStarPathFinding插件.使每一个贪吃蛇元素的移动目标点为前一个元 ...

  2. 汇编语言 贪吃蛇+画等边三角形

    学校强制要求参加汇编语言程序设计大赛 要求实现 贪吃蛇+画等边三角形 双任务系统. 详见ppt和报告--------->>>>>下载点这里 一.比赛要求: 1.双窗口要求 ...

  3. HNUST OJ 2293 贪吃蛇吃苹果

    问题 J: 贪吃蛇吃苹果 时间限制: 1 Sec  内存限制: 128 MB 题目描述 贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃 ...

  4. 重力感应贪吃蛇(C51 MPU6050 8*8LED点阵)

    重力感应贪吃蛇(C51 MPU6050 8*8LED点阵) 本文讲述如何从无到有用C51做一个重力感应的贪吃蛇,包括元件选型.原理图PCB绘制和代码编写. 重力感应贪吃蛇(C51 MPU6050 8* ...

  5. Unity实现简单贪吃蛇

    贪吃蛇 游戏是一款经典的手机游戏,既简单又耐玩.通过控制蛇头方向吃蛋,使得蛇变长,从而获取积分. 代码下载 蛇头的实现: 制作一个红色cube立方体,控制着蛇的运动方向,以及遇到食物吃掉食物的功能. ...

  6. 单片机课程设计,基于AT89C51和LCD-12864的贪吃蛇游戏

    前言 课程设计报告以及keil文件和protues仿真在文末. 一.设计内容及要求 设计一个贪吃蛇游戏,使其具有以下游戏规则: ①当没有改变方向时,贪吃蛇沿原来路径一直前进 ②贪吃蛇无法回头,只能异于 ...

  7. 课程设计报告linux小游戏,嵌入式课程设计报告---贪吃蛇游戏.doc

    嵌入式课程设计报告---贪吃蛇游戏 嵌入式系统课程设计报告书 课题题目:贪吃蛇游戏 学 院:核自院 班 级:测控三班 学 号:9 姓 名: 马文铂 第一章 引言- 2 - 1.1关于题目- 2 - 1 ...

  8. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

  9. 网页版贪吃蛇(HTML 5)

    (文字描述太繁琐了, 贪吃蛇算法很经典不多说, 那个伪播放器,不值一提.) 源码: 网页版贪吃蛇 [http://files.cnblogs.com/crystalplus/%E4%B8%A4%E4% ...

  10. C#游戏介绍大全,包括不限于(连连看、扫雷、推箱子、贪吃蛇、汉诺塔、消消乐、俄罗斯方块、飞机大战、坦克大战...)

    文章目录 题目 WPF贪吃蛇(彩色版) 飞机大战 象棋 五子棋 1 连连看 2 黑白棋 3 汉诺塔 4 推箱子 5 扫雷 6七巧板 8 人物拼图1 9 人物拼图2 10 停车场游戏 11 坦克大战 1 ...

最新文章

  1. 第一个OC类、解析第一个OC程序
  2. 《自己动手写开发工具》试读版电子书及光盘
  3. JavaScript之childNodes属性、nodeType属性学习
  4. AVS3关键技术、性能和复杂度分析
  5. DaleCloud(原NFine)介绍二:系统菜单及菜单按钮权限控制
  6. 原版Caffe在Windows10 VS2015 python3.7 CPU版本 详细安装笔记 BVLC caffe
  7. 2019年互联网寒冬,带你走进真实的面试杀出重围
  8. (二)硕博生常用的外文文献检索方式推荐
  9. 个人号微信二次开发,微信ipad协议
  10. 智慧公厕,让厕所也成为城市文明的一部分
  11. html5怎么做京东表格,HTML+CSS+PS 编写京东商城首页
  12. 爬虫入门到放弃系列07:js混淆、eval加密、字体加密三大反爬技术
  13. 【PS实例】照片拼图的制作
  14. ResNet之残差结构的理解
  15. 大学计算机基础专升本复习提纲
  16. VBA实现为Excel中自定义名称的单元格添加批注
  17. 第一个项目的大概流程
  18. 思维导图工具之Mindmeister
  19. 使用virt-manager创建虚拟机
  20. python实现工具exe自动化

热门文章

  1. html页面布局主要有哪些形式,HTML页面布局形式与原则
  2. 无法确认设备和计算机之间的连接,如何解决“爱思助手”无法识别设备或连接超时等故障?...
  3. 雷达为什么要进行脉冲压缩
  4. markdown pad2注册码(2017年9月27日)
  5. 计算机u盘设备无法启动不了怎么办,U盘无法弹出说正在占用怎么办?Windows无法停止设备解决方法...
  6. 前端实时可视化开发工具
  7. android百度地图注册,百度地图API key申请申请详细步骤
  8. 金融反欺诈的底层逻辑
  9. b站视频下载与字幕下载方式总结
  10. 我在腾讯看点的导师 Steven