ACM数学知识体系

#include<iostream>
#include<string>
#include<stack>
using namespace std;
#define n 8

stack <int *> s;

int * createMaze(){//初始化迷宫
	int i,j;
	int * a;
	a=new int[n*n];
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			*(a+n*i+j)=-1;//不设置为0的原因是超过矩阵范围的位置
		}				//系统默认的是0,会引起麻烦
	}
	*(a+n*0+1)=3;s.push(a+n*0+1);//当前位置入栈
	*(a+n*1+1)=1;*(a+n*1+2)=1;*(a+n*1+3)=1;*(a+n*1+5)=1;
	*(a+n*2+3)=1;*(a+n*2+4)=1;*(a+n*2+5)=1;*(a+n*2+6)=1;
	*(a+n*3+1)=1;*(a+n*3+2)=1;*(a+n*3+3)=1;*(a+n*3+5)=1;
	*(a+n*4+1)=1;*(a+n*4+4)=1;
	*(a+n*5+1)=1;*(a+n*5+2)=1;*(a+n*5+4)=1;*(a+n*5+5)=1;*(a+n*5+6)=1;
	*(a+n*6+2)=1;*(a+n*6+3)=1;*(a+n*6+4)=1;*(a+n*6+6)=1;
	*(a+n*7+6)=1;
	return a;
}
//程序中标记-1,1,2,3,4的值表示意义如下:
//-1:障碍物(方块)
//1:可行走的通道且还未曾被五角星通过
//2:五角星走过的通道(这样说不完全准确),更准确的说是已经压栈的元素(地址)
//3:标识五角星
//4:遇到再也走不通的位置,离开时所填充的障碍(与-1的作用相同,但是不显示出来)

void printMaze(int * a){//打印迷宫
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(*(a+n*i+j)==1||*(a+n*i+j)==2||*(a+n*i+j)==4){
				cout<<"  ";
			}
			else if(*(a+n*i+j)==3){
				cout<<"★";
			}
			else{//*(a+n*i+j)==-1
				cout<<"■";
			}
		}
		cout<<endl;
	}
}

void run(int * a,char ch){
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(*(a+n*i+j)==3){
				switch(ch){
				case ‘w‘:
					if(*(a+n*(i-1)+j)==1){
						*(s.top())=2;
						s.push(a+n*(i-1)+j);//入栈
						*(s.top())=3;
					}
					if(*(a+n*(i-1)+j)==2){
						*(s.top())=-1;
						s.pop();//出栈
						*(s.top())=3;
					}
					return;
				case ‘a‘:
					if(*(a+n*i+j-1)==1){
						*(s.top())=2;
						s.push(a+n*i+j-1);//入栈
						*(s.top())=3;
					}
					if(*(a+n*i+j-1)==2){
						*(s.top())=-1;
						s.pop();//出栈
						*(s.top())=3;
					}
					return;
				case ‘s‘:
					if(*(a+n*(i+1)+j)==1){
						*(s.top())=2;
						s.push(a+n*(i+1)+j);//入栈
						*(s.top())=3;
					}
					if(*(a+n*(i+1)+j)==2){
						*(s.top())=-1;
						s.pop();//出栈
						*(s.top())=3;
					}
					return;
				case ‘d‘:
					if(*(a+n*i+j+1)==1){
						*(s.top())=2;
						s.push(a+n*i+j+1);//入栈
						*(s.top())=3;
					}
					if(*(a+n*i+j+1)==2){
						*(s.top())=-1;
						s.pop();//出栈
						*(s.top())=3;
					}
					return;
				}
			}
		}
	}
}

char getDirection(int * a){//得到方向
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(*(a+n*i+j)==3){
				//必须按优先级排列
				if(*(a+n*i+j+1)==1){
					return ‘d‘;
				}
				if(*(a+n*(i+1)+j)==1){
					return ‘s‘;
				}
				if(*(a+n*i+j-1)==1){
					return ‘a‘;
				}
				if(*(a+n*(i-1)+j)==1){
					return ‘w‘;
				}

				if(*(a+n*i+j+1)==2){
					return ‘d‘;
				}
				if(*(a+n*(i+1)+j)==2){
					return ‘s‘;
				}
				if(*(a+n*i+j-1)==2){
					return ‘a‘;
				}
				if(*(a+n*(i-1)+j)==2){
					return ‘w‘;
				}

				else{
					cout<<"无效按键"<<endl;
				}
			}
		}
	}
}

int handle(){
	int * a;
	int count=1;
	string step;//用string是为了避免用户多输入字符而引起错误
	a=createMaze();
	printMaze(a);
	cout<<"请按任意键进行下一步!"<<endl;
	while(*(a+n*7+6)!=3){
		cout<<"第"<<count<<"步:";
		cin>>step;
		run(a,getDirection(a));
		printMaze(a);
		count++;
	}
	cout<<"恭喜你,顺利到达终点!"<<endl;
	return 0;
}

int main(){
	handle();
	return 0;
}

ACM数学知识体系,布布扣,bubuko.com

时间: 2024-08-08 13:59:12

ACM数学知识体系的相关文章

(连载)边喝咖啡边学Unity——第二章 预备知识体系

第二章 预备知识体系 --本章涉及空间数学.解析几何.线性代数.计算机图形学.算法.数据结构等众多基础学科.同上一章相比,虽然枯燥,但是绝不能称为废话之章,即使粗略的看一遍,也比直接跳过来的好,详细地读完,会让读者以后的开发之路走的更加平坦. 并且本章的知识不仅仅对您的Unity游戏开发有帮助,对于大部分软件开发人员都是大有作用的. 作为传统3D游戏编程来讲,需要运用到的知识面非常之广,涉及到的学科特别之多.而通常讲编程的书籍,会弱化数学知识,讲数学的书籍,会弱化编程方面的知识.这就是我在第一章

学习大数据技术,需要具备哪些【数学知识】?你了解了吗?

谈起大数据技术,很多人都觉得是高大上的一门技术,学起来应该是困难重重!其实对于大数据技术而言,难的不是大数据技术本身,而是需要太多的基础知识,比如说:数学知识.英语能力.编程基础等等. 数学,我们从小就开始学习,一直在跟各种数据打交道,各种公式等等,是大数据学习的必备技术之一. 英语,对于大数据技术文章,比较先进的还是外文比较多,需要一定的英语基础,当然了翻译软件是个好东西,但必要的英语能力也是必须的. 编程,这个就不用我多说了吧,计算机语言,你学不会,该如何向电脑发布指令! 好了,回归我们今天

认知,构建个人的知识体系(上)

1.前言 本文将聊聊我对构建个人知识体系的一些想法,主要是为了提升自我认知.从个人经历开始,谈谈对知识的划分,也就是一个是什么,为什么的过程. 2.缘起 把时间回到一年前,那时候我工作快一年了,得益于前面的一些努力,工作比较顺利.特别是技术上,没有遇到太多过无法解决的问题.同时也开始迷茫,工作难道就是这个轻松的样子?三五年之后那不是很无趣,该怎么办? 想找到这个问题的答案,而最好的方式莫过于,亲自去了解那些三五年工作经验的人是怎么的样子. 因此从那时候起,关注了不少来公司面试的人的简历,也有过几

2016年本博客知识体系引导(持续更新)

前言 为了方便大家的阅读以及自己的知识体系的建立,特意来写出这个引导文章.以前我是遇到什么写什么,想到什么写什么,从2016年开始我将围绕这个知识体系来写文章,从点到面来逐步建立并完善自己的知识体系,同时也欢迎大家关注我的博客. 1.Android IPC机制 Android IPC机制(一)开启多进程 Android IPC机制(二)用Messenger进行进程间通信 Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用 Android IPC机制(四

如何搭建数据化运营知识体系

数据化运营的概念随着大数据时代的到来被炒得越来越火热,提到数据分析.数据运营让很多产品经理.运营新人觉得瞬间高大上很多.随着数据概念的火热,如增长黑客.GrowingIO等一系列的数据分析指导产品增长的书籍.产品变得越来越受人追捧. 对于互联网行业来说,无论是产品经理还是运营,都需要具备一定的数据运营能力,本文将帮助没有数据化思维的小伙伴搭建基础的数据化运营体系. 本文会按照上图中的数据化运营业务流程进行分析,从明确目标.数据指标制定.数据获取.数据分析.形成策略.验证优化这六个方面来搭建数据化

快速建立个人知识体系

最近建了一个运维架构知识体系的群,为什么要创办这么一个群,对大家有什么样的好处? 我相信刚参加工作的都会碰到这样的问题:新人刚入职领导交代一个不会,但是为了表现自己的能力不差,领导没有看走眼,硬着头皮也要完成下去,会面临如下几个问题: 第一时间在各大QQ群或微信群咨询那么你有没有想过你为什么提的问题没有人回答:1.没人回答还是你不会提问?2.牛人也有自己的工作,回答了是分享,不回答也是理所应当.之前写过一篇新人如何提问?不过,根据我的统计,不会提问的人大有人在.我先列举几个提问的问题. 大并发网

Web 前端知识体系精简

Web前端技术由html.css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言.而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构.本文将对Web前端知识体系进行简单的梳理,对应的每个知识点点到为止,不作详细介绍.目的是帮助大家审查自己的知识结构是否完善,如有遗漏或不正确的地方,希望共勉. JAVASCRIPT 篇 0.基础语法 Javascript基础语法包括:变量定义.数据类

canvas绘图数学知识总结

题外话: 最近看了一本书叫 <HTML5 Canvas核心技术 图形.动画与游戏开发>已经算是看了85%,基本接近尾声,所以近期会多总结一些关于canvas的东西, 这本书讲的还算可以,最大的障碍就是一些数学知识和理论的应用,第八章的碰撞检测比较难理解,看这部分的时候,我感觉非常吃力,向量运算是主要技术点, 我这本书是以阅读源码为主的,有兴趣的朋友可以看看,大家交流一下. 三角函数 canvas中所有和角有关的api 都是用的弧度 js api 如 Math.sin(),Math.cos,Ma

职业程序员的知识体系

今天看到一篇文章,说人的知识分成两种,惰性知识和活性知识.那些对我们的工作,生活没有帮助的知识,称为惰性知识.惰性知识是用来装门面的,吹牛的.他不能解决我们的问题,只是填补我们生活的空虚.比如金鱼的记忆有几秒,就属于这种惰性知识.不过根据我最近的经验,我发现每天早上,当鱼儿们看见我拿起装鱼食的瓶子时,都很激动.这显然不是几秒记忆所能办到的. 为什么会有惰性知识呢?当一个知识不能与我们已有的知识体系建立关联,那么当我们遇到问题时,我们不会想到他,用到他,于是他就成了惰性知识.就好像你是一个将军,手