迷宫问题

2024-05-26

迷宫问题(精选九篇)

迷宫问题 篇1

《数据结构与算法》是计算机专业的主干基础课程,学生从其先修课程《高级语言程序设计》过渡到《数据结构》的学习时,在教学中,学生跨过《高级语言程序设计》入门《数据结构与算法》课程所遇到的重点及难点是(1)栈和队列的应用及区别;(2)深度优先和广度优先搜索算法的应用及区别。栈和队列的概念很简单而且很直观,但以栈和队列作为数据结构的深度优先和广度优先搜索算法却是学生突破高级语言学习进入数据结构与算法学习时需要首先掌握的一对专业基础算法。

栈和队列应用的教学误区是用多个孤立、简单、无意义和不直观的例子分别讲解栈和队列的应用。突破这一教学难点的关键是寻找一个统一的、直观的、而且有趣的典型实例进行精讲,该实例同时包含了栈和队列的应用及其区别并且直观地呈现了深度优先和广度优先搜索算法的应用及其区别,统一了栈和队列的应用。学生通过该实例的精学,就可以很容易掌握基于数据结构栈和队列的深度优先和广度优先搜索算法,从而快速入门课程学习。这个典型实例就是迷宫问题。

1 基于数据结构栈和队列的深度优先和广度优先搜索算法

(1)栈是插入和删除操作仅在表的同一端进行的线性表。允许插入和删除的一端称为栈顶,另一端称为栈底。存储结构很简单:插入和删除操作限制在同一端进行的一维数组。其基本操作为入栈和出栈。栈如图一所示。

虽然数据结构栈很简单,但以它为数据结构的算法(深度优先搜索算法或回溯法)很有用。

深度优先搜索算法DFS:(1)访问栈顶元素一个邻接的未访问的节点,标记它,并入栈。(2)在不能执行(1)时,若栈不空,则出栈一个元素。(3)如果不能执行(1)和(2)时,则完成了搜索。

正如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索。

(2)队列是插入和删除各在一端进行的线性表。允许删除的一端叫队头,允许插入的一端叫队尾。存储结构很简单:插入和删除操作各在一端进行的一维数组。其基本操作为入队和出队。队列如图二所示。

虽然数据结构队列很简单,但以它为数据结构的算法(广度优先搜索算法)很有用。

广度优先搜索所遵循的搜索策略是尽可能“浅”地搜索。

深度优先搜索算法BFS:

(1)首先将始节点放入队列中。

(2)从队列中出队第一个节点,并检验它是否为终节点。如果是终节点,则结束搜索。否则将它所有尚未访问过的邻节点入队。

(3)若队列空,结束搜寻并回传“找不到终节点”。

(4)重复步骤(2)。

广度优先搜索的显著特点是,从始结点到终结点的代价和结点的深度成正比,用广度优先得到的解一定是最优解。

2 深度优先和广度优先搜索算法的典型实例——迷宫问题

迷宫问题1:找出迷宫从入口到出口的行走路径。

迷宫问题2:找出迷宫从入口到出口的行走步数最少的路径(最短路径)。

例如在图三所示迷宫中,#格表示墙,空格表示通道。

在迷宫中规定行走规则为:每次行走方向为左、下、右、上四个方向,每次行走到下1个相邻格。

2.1 迷宫问题1的解决:栈的应用----深度优先搜索算法

(1)问题求解方法分析

最自然的求解方法是回溯法,从入口出发,固定按照左、下、右、上四个方向的顺序找到为通道的相邻格中第一个,若找到,则下一步走到该相邻格,否则返回上一步(回溯),按照同样的规则找下一步,如此循环,直到走到出口或退出出口(无路径)为止。

(2)问题的表示--数据结构

a.为了保证每一个行走位置都有在左、下、右、上四个方向上的下一个位置,为迷宫加一圈边墙,如图四所示。

b.迷宫可以用二维数组maze[m][n]来表示,数组中的元素0表示通道,1表示墙,2表示路径(已走过),3表示死路(四个方向的下一格均不为0)。迷宫入口为maze[1][1],出口为maze[m-2][n-2]。

c.任意时刻在迷宫中的行走位置可用点的行列下标(i,j)表示,在任一行走位置maze[i][j]时,下一位置的行走方向为左、下、右、上四个。

d.固定按顺时针搜索当前位置的四个运动方向右、下、左、上的下一位置。

e.用一个栈保存行走的路径(从栈底到栈顶),栈元素为行走位置的坐标(i,j)。如例中定义栈为int s[100][2],其中每个单元存放2个行列下标i和j。

(3)算法

for(入口位置进栈,入口位置元素标2;栈不空且出口位置未进栈;)

if(栈顶右位置元素为0){右位置进栈;右位置元素标2}

else if(栈顶下位置元素为0){下位置进栈;下位置元素标2}

else if(栈顶左位置元素为0){左位置进栈;左位置元素标2}

else if(栈顶上位置元素为0){上位置进栈;上位

置元素标2}

else{栈顶元素标3;栈顶位置出栈}

if(栈空)printf("无路径");

else输出栈底到栈顶或输出Maze;

(4)程序

2.2 迷宫问题2的解决:队列的应用----广度优先搜索算法

(1)问题求解方法分析

最自然的求解方法是,从入口出发,固定按照左、下、右、上四个方向的顺序找到所有为通道的相邻格,并走到所有为通道的相邻格,如此循环,直到走到出口为止,最先走到的这条路径即为最短路径。

(2)问题的表示--数据结构

a.为了保证每一个行走位置都有左、下、右、上四个方向的下一个位置,为迷宫加一圈边墙,如图四所示。

b.迷宫可以用二维数组maze[m][n]来表示,数组中的元素0表示通道,1表示墙,2表示路径(已走过),3表示死路(四个方向的下一格均不为0)。迷宫入口为maze[1][1],出口为maze[m-2][n-2]。

由如图四所示迷宫确定的二维教组如下:

c.任意时刻在迷宫中的行走位置可用点的行列下标(i,j)表示,在任一行走位置maze[i][j]时,下一位置的行走方向为左、下、右、上四个。

d.固定按顺时针搜索当前位置的四个运动方向右、下、左、上的下一位置。

e.用一个队列保存行走的所有路径,队列元素为行走位置的坐标和该位置的前趋在队列中的下标所构成的一个三元组(i,j,k)。如例中定义队列为int q[100][3],其中每个单元存放2个行列下标i和j及前趋在队列中的下标k。

(3)算法

for(入口位置入队,标2;队列不空且出口位置未入队;)

{if(队头右位置元素为0){右位置进队列;右位置元素标2}

if(队头下位置元素为0){下位置进队列;下位置元素标2}

if(队头左位置元素为0){左位置进队列;左位置元素标2}

if(队头上位置元素为0){上位置进队列;上位置元素标2}

队头元素标2

出队

}

if(队列空)printf("无路径");

else输出队列中的最短路径或输出Maze;

(4)程序

3 迷宫问题的教学价值

迷宫问题是一个在《数据结构》课程教学中很有价值的实例,它的价值体现如下:(1)实际问题的计算机表示,如迷宫用一个二维数组表示,路径用栈和队列表示;(2)迷宫问题同时提出完备的两个问题的求解:求出一个解与求出最优解;(3)迷宫问题同时作为栈与队列应用入门的经典范例,问题直观、有趣、通俗易懂并且跨越了高级语言编程学习的水平;(4)迷宫问题同时使用了学生应首先掌握的一对专业水平的算法:深度优先搜索算法和广度优先搜索算法。(5)通过教师精讲学生精学迷宫问题后,学生可以找到数据结构与算法学习的一个很好的入口。

参考文献

[1]萨尼著.汪诗林等译.数据结构、算法与应用--C++语言描述[M].北京:机械工业出版社,2000.

[2]唐策善,李龙澎编著.数据结构——用C语言描述[M].北京:高等教育出版社,1995.

c语言迷宫问题代码实现 篇2

#include

#include

#define LEN sizeof(SEAT)

#define MAXSIZE 100

#define LENGTH 30

typedef struct

{

int x;//横坐标

int y;//纵坐标

int di;//表示方向,0-3分别表示东南西北。

}SEAT;

struct StackList

{

SEAT stack[MAXSIZE];

int top;

}*Stack;

int EmptyStack(StackList*Stack)//判断是否为空栈

{

if(Stack->top==0)

return 0;

else

return 1;

}

int Move[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//分别表示向东、西、南、北需要加上的坐标

int Mase[LENGTH][LENGTH]={0};//初始化为0

int length,width;

void InitMase()//在迷宫的外围添加一层“墙壁”(赋值为1),使得迷宫的任意一点都有四个方向

{

int i,j;

for(i=0;i

{

for(j=0;j

Mase[i][j]=1;

}

for(i=0;i

{

for(j=0;j

Mase[j][i]=1;

}

}

void InitStack(StackList*Stack)//初始化

{

Stack->top=0;

return;

}

int PushStack(StackList*Stack,SEAT CurSeat)//进栈

{

if(Stack->top==MAXSIZE-1)

return false;

else

{

Stack->stack[Stack->top].x=CurSeat.x;

Stack->stack[Stack->top].y=CurSeat.y;

Stack->stack[Stack->top].di=CurSeat.di;

Stack->top++;

return true;

}

}

int PopStack(StackList*Stack)//出栈

{

if(Stack->top==0)

return false;

else

{

Stack->top--;

return true;

}

}

int Pass(SEAT p)//判断当前是否可行

{

if(Mase[p.x][p.y]==0)

{

return true;

}

else

return false;

}

SEAT NextSeat(SEAT CurSeat)//查找下一个点,并返回

{

SEAT temp;

temp.x=CurSeat.x+Move[CurSeat.di][0];

temp.y=CurSeat.y+Move[CurSeat.di][1];

return temp;

}

void Mark(SEAT p)//标记已经走过的点,避免重复

{

Mase[p.x][p.y]=-1;

}

int PathWay(SEAT start,SEAT end)//找路线

{

Stack=(struct StackList*)malloc(sizeof(struct StackList));

InitStack(Stack);

SEAT CurSeat;

CurSeat.x=start.x+1;//由于多加了一层墙壁,因此坐标的值要加1

CurSeat.y=start.y+1;//

CurSeat.di=start.di;//

do

{

if(Pass(CurSeat))

{

PushStack(Stack,CurSeat);

Mark(CurSeat);

if(CurSeat.x==end.x+1&&CurSeat.y==end.y+1)//如果找到出口,返回{

return true;

}

else

{

int find=0;

while(CurSeat.di<3&&find==0)//找下一个结点的方向

{

CurSeat.di++;

SEAT temp;

temp=NextSeat(CurSeat);

if(Mase[temp.x][temp.y]==0)

{

temp.di=-1;

CurSeat=temp;

find =1;

}

}

}

}

else

{

if(EmptyStack(Stack))//当前的点不能走,出栈

PopStack(Stack);

if(EmptyStack(Stack))//当前的点变为前一个点

{

CurSeat=Stack->stack[Stack->top-1];

}

while(CurSeat.di==3&&EmptyStack(Stack))////当前的点找不到下一个点,出栈

{

PopStack(Stack);

CurSeat=Stack->stack[Stack->top-1];//当前的点变为前一个点}

if(EmptyStack(Stack))

{

int find=0;

while(CurSeat.di<3&&find==0)////找下一个结点的方向

{

CurSeat.di++;

SEAT temp;

temp=NextSeat(CurSeat);

if(Mase[temp.x][temp.y]==0)

{

temp.di=-1;

CurSeat=temp;

find =1;

}

}

}

}

}while(EmptyStack(Stack));

return false;

}

void PrintStack(StackList*Stack)//输出路线

{

if(Stack->top==0)

printf(“There is no route can be out of the mazen”);

else

{

int i;

for(i=0;itop;i++)

{

if(i!=0)

printf(“->(%d,%d)”,Stack->stack[i].x-1,Stack->stack[i].y-1);

else

printf(“(%d,%d)”,Stack->stack[i].x-1,Stack->stack[i].y-1);

}

}

}

void PrintMase()//输出迷宫

{

int i,j;

for(i=1;i

{

for(j=1;j

{

if(j!=1)

printf(“ %d”,Mase[i][j]);

else

printf(“%d”,Mase[i][j]);

}

printf(“n”);

}

}

int main()

{

int n;

SEAT start,end;

printf(“Please enter the maze of the length and width:n”);

scanf(“%d%d”,&length,&width);

printf(“Please enter the number of the maze wall unit(0

printf(“Please enter the labyrinth of the coordinates of the wall unit(0<=row,column):n”);while(--n>=0)

{

int x,y;

scanf(“%d%d”,&x,&y);

Mase[x+1][y+1]=1;

}

InitMase();

PrintMase();

printf(“Please enter the coordinates entrance(0<=x<%d,0<=y<%d):n”,length,width);

scanf(“%d%d”,&start.x,&start.y);

start.di=-1;

printf(“Please enter the coordinates exports(0<=x<%d,0<=y<%d):n”,length,width);

scanf(“%d%d”,&end.x,&end.y);

end.di=0;

if(PathWay(start,end))

PrintStack(Stack);

else

printf(“There is no route can be out of the mazen”);return 0;

迷宫算法综述 篇3

迷宫问题是图形学、图论和数据结构等领域中广为人知的一个经典问题。战略决策、机器人路径规划等许多智能问题都可以转化为寻找迷宫最优路径问题[1]。迷宫最优路径是指从迷宫的入口到达迷宫出口的最短通路。传统解迷宫路径问题的算法大多采用广度优先搜索或深度优先搜索[2]。随着迷宫规模的增大和复杂性的增加,传统搜索算法的空间和时间复杂性呈指数增加,且求解最优路径是通过全部路径求出后进行比较得到的,这些算法非常费时。后来又出现了基于八方向跟踪算法的、利用人工智能算法的搜索原理等方法[3、4]解决迷宫问题。随着近几年智能算法研究的深入,涌现了不少求解迷宫最优路径问题的仿生智能算法如遗传算法[5]、蚁群算法[6]等。仿生智能算法通过并行程序设计来解决大规模事例,但其结果大多只是近似最优解,解的收敛性是需要重点解决的问题。本文主要介绍深度优先搜索算法、广度优先搜索方法、遗传算法以及蚁群算法在迷宫问题的应用。

2. 迷宫算法分类

深度优先搜索(DFS):从入口出发,顺着某一方向向前探索,若能走通,则继续往前走;否则沿原路退回(回溯),换一个方向再继续探索.直至所有可能的通路都探索到为止。如果恰好某一步探索到出口,则就找到了从入口到出口的路径。为了保证在任何位置上都能沿原路退回,防止死循环,需要使用堆栈来保存大量记录。而要求解迷宫最短路径,则必须用深度优先搜索出所有到达出口的路径,通过比较得到最短距离的路径.这样也必然要求增加数据空间来保存搜索过程中当前最短路径.增加了空间复杂度。

广度优先搜索(BFS):从入口出发,离开入口后依次访问与当前位置邻接的单元格(上下左右方向),然后分别从这些相邻单元格出发依次访问它们的邻接格,并使“先被访问的单元格的邻接格‘先于’后被访问的单元格的邻接格”被访问,直至访问到迷宫出口,则找到了迷宫问题的最优解,即迷宫最短路径。该算法的显著特点是“层层推进”,探索点会随着探索的深入急剧增加,相应地,需要大量的空间用来保存探索过程的记录。空间复杂度大。

遗传算法:遗传算法是一种随机的群体搜索算法,它是对达尔文生物进化原理的计算机模拟。该算法具有简单、通用、鲁棒性强的特点,适合处理传统的搜索方法难以解决的复杂和非线性问题。遗传算法的实现涉及到5个要素:染色体的编码、初始群体的设定、评估函数即适应度函数的设计、遗传操作的设计和算法控制参数的设定。在走迷宫的过程中,每一步都是选择东、南、西、北4个方向中的一个走,分别用数码1、2、3、4表示。由这些数码组成的数码串就构成了从开始点出发的一个方向序列。按照这个方向序列,从开始单元格所走过的单元格序列,就构成一种走法。迷宫的任何一种走法都可以转换成这样的一个数码串,这就构成了求解迷宫问题的遗传算法的染色体。一个染色体是一个方向序列。评估函数是用来评估个体好坏的。在本问题中可认为,如果2个个体各按照其染色体及方向序列走,能到达的单元格离目标单元格最近的那个个体最好。与一般遗传算法不同,本算法使用了2个变异算子,它们具有不同的搜索特点。主变异算子:随机地取染色体的某一个基因位,再随机地取一个方向数替换它。如对于染色体13241,随机取一位,例如第3位,再随机地取一个方向数码(如4)替换它,则变异后的染色体为13441。从变异算子:随机地取染色体中的一段,将该段的所有基因位变成该段的第一个基因位上的数字。如对于染色体13241,随机地取一段如第2位到第4位的数码段324,将其变为333,则变异后的染色体为13331。该求解迷宫问题的遗传算法,虽然可以求得到达出口的路径,但不能求出最短路径,即最快找到出口的路径。

蚁群算法:根据蚁群觅食过程中能够发现蚁巢和食物源之间最短路径的启发,意大利学者Colorni A和Dorigo M等人提出了一种新型的智能优化算法——蚁群算法,这种算法对旅行商问题(TSP)的求解结果显示,其具有较强的鲁棒性和发现较好解的能力。

蚁群算法应用于解决迷宫问题,步骤大致如下:

Step 1:数据初始化:初始化迷宫矩阵,算法最大迭代次数计数器lt,不能改善优化解的最大迭代次数计数器vt,设定蚂蚁数量2,正、反向蚂蚁各m只,设定常系数。

Step 2:m只蚂蚁以信息素为依据按概率分布于距离迷宫的入口路径长度为k的位置上,另m只蚂蚁以信息素为依据概率分布于距离迷宫的出口路径长度为k的位置上。

Step 3:蚁群按移动规则前行,同时更新迷宫矩阵的路径信息,直到所有蚂蚁停止活动。

Step 4:查找本次移动搜索到的最优路径,更新最优路径上信息素。

Step 5:计数。

Step 6:如果lt,vt均不超过设定初值,转Step2,否则下一步。

Step 7:输出最优路径长度和最优路径。

Step 8:算法结束。

4. 总结

随着计算机的发展,特别是各种新算法不断涌现,迷宫问题已经取得了一些研究成果。从研究成功看,主要有以下研究难点与趋势:已有算法对于大规模迷宫问题还存在不足,存在搜索空间大、求解速度慢、无法得到最优路径等缺点。目前智能化的算法不断涌现。模糊控制、神经网络、遗传算法、蚁群算法以及它们的相互结合也是研究热点之一。智能化方法能模拟人的经验,逼近非线性,具有自组织、自学习功能并且具有一定的容错能力。这些方法应用于迷宫问题中更灵活,更具智能化。

参考文献

[1]卢开澄.图论及其应用[M].北京清华大学出版社,1980.

[2]严蔚敏,陈文博.数据结构及应用算法教程[M].北京清华大学出版社,2001.

[3]孙东秋.基于八方向跟踪算法的迷宫问题新解[J].计算机应用于研究,Vol.22No.8Aug.2005:103-105.

[4]陈春梅,杨世恩.用人工智能中的搜索原理解决迷宫问题[J].微计算机信息,2004,22(4-2):267-269.

[5]王斌,李元香.用遗传算法解迷宫问题[J].微型机与应用,2002,10:58—60.

飞碟迷宫作文 篇4

飞碟迷宫作文

??今天,我买了一个叫“飞碟迷宫”的玩具。它的形状像一个飞碟,里面是一个迷宫,这个迷宫和我们平常见到的`可不一样。它有两条线路可以选择,怎么走这个迷宫呢?很简单!它的2号跑道旁边有一个小洞,只有扯掉插销,拍一下飞碟,洞里光滑的小钢珠就会滚出来。现在就可以开始游戏了,只要让小钢珠从起点滚到终点就成功了。当小钢珠进入迷宫的轨道后,就会危机重重!为了让小钢珠顺利地前进,有时你要把飞碟倾斜,有时你要把飞碟竖起来,有时你要把飞碟倒过来,还有时你要把飞碟转动,但是千万要小心,绝不能让小钢珠冲出轨道,否则就前功尽弃了。只要你仔细观察,做到心平气和、不急不燥,你就一定能够成功!飞碟迷宫作文250字

小学生作文(中国大学网)

耳朵的迷宫 篇5

一般认同的说法是, 精神不正常的凡高, 手中的剃刀最初的目标并不是自己的耳朵。1888年2月, 凡高从巴黎来到法国南方小镇阿尔, 5月他在拉马丁广场边租下了“黄房子”的两个房间, 一间自己使用, 一间留给了他的好友高更。为了迎接高更的到来, 凡高满腔热情地在十二块墙壁镶板上画满了式样各异的向日葵。凡高原以为这些热烈的向日葵能得到高更的喜爱, 没想到从高更踏进黄房子那一刻起, 他就看这里不顺眼。凡高的热情遭到了高更的冷嘲热讽, 他极其轻蔑地对凡高说, “刺目的黄色, 单调乏味, 完全杂乱无章”。更让凡高不可容忍的是, 高更还极轻蔑地讽刺了凡高视奉若神明的几位艺术大师。凡高拿着刮胡刀对着高更大叫“你说的是谎言”。他要终止他的污蔑, 要割断高更的喉咙。高更没再坚持自己的声音, 逃到附近的小旅店里躲了起来。12月23日, 凡高携带剃刀, 跟踪他的室友保罗·高更, 但他最终没有攻击高更, 而是回到家中, 割下自己的左耳垂下部, 用报纸包裹着, 送给了一位名叫蕾切尔的妓女。

2001年, 两位汉堡大学的学者——汉斯·考夫曼和丽塔·维尔德甘斯在一本著作中提出新的观点。该书名为《凡高的耳朵:保罗·高更和缄默的约定》, 于2009年出版问世。作为拥有历史学博士学位的退休校长考夫曼与艺术史博士维尔德甘斯, 历经十年之久, 通过翻阅警署的报告, 筛选资料、研究证人证词和搜索其他材料后认为:高更——这名击剑运动员, 在与凡高的激烈争执中将其耳朵砍下。后来, 为了息事宁人, 保证高更免于牢狱之灾, 双方合谋掩盖罪行。作者认为, 事件的官方版本总体上倾向于高更的立场, 致使整个报告漏洞百出、前后不一, 凡高本人在失去了一只耳朵后没有对此事做任何评论, 因此历史学家们只得通过高更一方的故事还原当时的情景。且两位艺术家后来暗示, 真相远远比传闻复杂。

据该书称, 1888年12月, 高更和凡高同时来到了法国南部某地, 并居住在一起, 他们两人常常因艺术观点不同而打架。凡高认为一名艺术家应该根据所看到的景物作画, 而高更则认为艺术家应当根据自己的记忆作画。历史学家称, 凡高就是在此期间失去了一只耳朵, 这一点是毫无争议的。考夫曼表示, 虽然凡高和高更经常因对艺术的不同看法而打架, 不过凡高的耳朵并不是因此而丢;而是为了争抢一位名叫蕾切尔的妓女, 他们二人在妓院门外起了争执, 高更手持利剑向凡高挥舞而去, 在争斗中将他的耳朵砍掉。不过考夫曼表示他们不能确定高更到底是故意为之还是失手所致。

考夫曼告诉记者:“出了这种事, 事件的主角都发誓要表示缄默, 高更也将剑扔到了河里……事发第二天, 警察询问高更, 他就编造了凡高割掉自己耳朵的说法, 随后高更就扔下了自己的朋友, 消失了……当时凡高正躺在床上养伤, 没有为警方提供任何信息, 并于7个月后自杀身亡。如果真相被揭露, 高更就会进监狱。此外, 凡高所说的割掉自己耳朵用的匕首或剃刀一直也未被发现。”除了书面证据外, 两位作者还指出, 凡高被割下的那部分耳朵边缘呈锯齿形, 与高更佩剑边缘吻合, 因此种种证据将矛头指向高更。

媒体随即蜂拥而上, 以至连早间新闻也专门报道了这一惊天爆料。艺术史学家们对此褒贬不一, 有人称之为无稽之谈, 认为它不过是哗众取宠地将猜测添加到早已不堪重负的凡高事件上而已。马丁·盖福德——《黄色的房子:凡高、高更在阿尔的动荡九周》 (一本记述两位艺术家交往的书) 的作者, 他称考夫曼和维尔德甘斯的观点为“飞跃的野性猜想”。另一名凡高研究专家斯特凡, 著有《凡高:神话与现实》一书, 一面肯定这本新著确为“认真研究和撰写”, 可同时他也表示“没有发现任何事实能验证这个观点”。此外, 还有《文森特·凡高:天堂和地球之间》的作者尼娜·齐默尔乐观地认为:“我喜欢这本书, 因为它将新的材料融会贯通, 并进行深入研究, 同时这也是为什么它值得探讨、值得一读的原因。”但是她也承认:“我不会相信这种新观点, 只能将之当成乐趣选择性地阅读而已。”

无论是以何种途径传播, 自1890年凡高自杀以后的一百多年间, 有关画家耳朵故事的生命力经久不衰, 从低俗到高雅:如商品、电影、音乐、唱片、故事、戏剧以及触目惊心的恶作剧, 甚至You Tube上的视频。用谷歌搜索“凡高的耳朵”, 会出现惊人的96900条相关信息, 从新泽西州的名为“凡高的耳朵”的餐馆, 到《纽约时报》作家黛博拉·所罗门在其专栏里称, 他在2000年发现了大批所谓亵渎艺术的纪念品, 这些扭曲的粉红色橡胶制品, 易趣网煽动说:“凡高的耳朵, 捏一下!”

You Tube上的视频文件将耳朵进行了数字化的处理。一位名为库兰的土耳其艺术家, 上传了他用直尺剃刀对其左耳进行彻底切割的视频。另外还有以凡高的残耳为模型制成的一个杯子, 当杯子盛满热的液体时, 杯身的颜色也会改变。一家网站的八级会员上传了一个甜蜜的超现实主义视频:一只断耳在一棵长着紫色枝桠的树上摇摇欲坠。

在流行音乐领域, 至少有3个摇滚乐队的命名从这个故事中得到启发:英国的聋人乐队、美国“凡高之耳”乐队、西班牙的“凡高的耳朵”乐队。目前所知, 有关凡高最好的音乐作品也许是琼尼·米契尔1994年的专辑, 这本专辑的封面异常醒目:一张裹着白色绷带面孔的歌手自画像。

各种创意光怪陆离。在Matt Swan的一部一人饰演双角色的喜剧中, 当朋友问他为何弄伤自己的耳朵?那个痛苦的艺术家回答:“我不需要用听觉去画画!”还有, 由巴西作家Moacyr Scliar撰写的一篇短篇小说, 说的是一个生意失利的商人向他的债权人出售凡高的耳朵产品来贿赂他。已故的荷兰电影制作人Theo·凡高, 与凡高的曾孙以及身为凡高画作交易商的弟弟同名, 曾经考虑制作一部为《金耳》的影片。“大多数关于凡高的电影都在关注画家的人道主义, 这是如此无聊。”1995年, 导演在接受《纽约时报》采访时说, “我的意思是, 凡高割掉了他的耳朵。他有性病, 他只是一个人。”当然, 耳朵只是关于凡高生活电影里的一个事件而已, 包括《Vincente Minnielli的生活欲望》 (1956) 和《Robert Altman’s Vincent and Theo》 (1990) 。1957年, 一名土耳其作曲家, Nevit Kodalli甚至将这一事件放到了一个音乐剧中。凡高, 被《时代》杂志音乐评论家描述为“厌恶不停重复, 尝试用颜料来宣泄音乐质感的画家。”

关于耳朵的玩笑与恶作剧更是林林总总, 俯拾皆是。2003年, 在凡高诞辰150周年的纪念日当天, 一位英国研究同行在他的网站上发布了一张照片, 据称是一张装有凡高耳朵的玻璃瓶的照片。据科尔德霍夫说, 这个瓶子最近在法国南部被发现。当前, 荷兰和法国皆将之视为国宝, 正对它的归属而喋喋不休。“当然, 这是凡高诞辰纪念日最大的讽刺事件, 但一些严肃的新闻机构和报纸却将之当作事实登出。”

所有这一切昭示出诸多问题:我们真正了解凡高多少, 凡高的故事对于解读他的作品有多重要?为什么那些关于艺术家的理论观点对公众的想象力有着强大的诱惑?不管其理论是关于凡高的自残行为还是精神问题, 抑或是他的自杀事件。

卡米耶·毕沙罗的重孙, 现任纽约现代艺术博物馆馆长的约阿希姆·毕沙罗在最近展出的《凡高之夜》画展中称:“即便是那些从未去过画廊或艺术博物馆, 从不关注艺术的人都知道两个名字:达芬奇和凡高。”凡高的故事之所以流行, 是因为各种关于疯狂幻想的滋生, 它造就了比凡高与他的作品影响更巨大的影像。凡读过他的书或者看过电影的人, 着实不必再去欣赏那些一直被人们视为特殊环境下产生的混乱作品。

毕沙罗指出:“凡高的很多事情我们都不知悉, 特别是涉及到其精神世界的来源。有人说是癫痫, 有人说是酗酒, 还有其他种种观点。我更爱细细品读那些留存下来的如此动人的信件。凡高相当博学, 他的文笔优美之极, 满溢激情。他精通四种语言, 对诗歌、文学以及关乎19世纪艺术史的小说都充满兴趣。凡高这一面之所以向来不为人们所知, 全因这些相悖于我们心中根深蒂固的艺术家形象。”

上海迷宫 篇6

事务所:SAKO建筑事务所

建筑师:Keiichiro SAKO,Nobutoshi HARA

面积:589.7平方米

完成时间:2011年4月

摄影:Koji Fujii

Location:Shanghai,China

Architects:SAKO Architects

Designer:Keiichiro SAKO,Nobutoshi HARA

Area:589.7 sqm

Complete:2011.04

Photographer:Koji Fujii

这个项目是儿童服装品牌“marco&mari”为开拓中国市场在上海开设的儿童会所。其中包含了服装店、美容室、舞蹈室、影视室、咖啡厅、游戏室、图书室、儿童教室等10余种功能。

由于此前在北京分店运用的“圆拱”主题,成功地诠释了此儿童服装品牌的特性,因此我们把它进一步发展成为一个迷宫。利用中央4.6m的层高,做成了一个巨大的圆顶,在其周围穿插弯曲的墙面从而分割出不同功能区。通过不断变换运用4种不同曲度的墙面,在起到支撑2层地板的承重作用的同时,满足了10余个不同功能对于体量、形式、开放性和闭锁性的不同要求,创造出不同的空间感。同时,每个曲面在垂直方向也利用高低变化,分割出服装展示、楼梯、接待处等空间要素。

“圆拱”这一设计理念被运用在服装店的家具、圆形天花板装饰以及贯穿于曲面墙壁上的展示架等各个空间。

被大小各异的无数圆拱包围的空间,时大时小,时宽时窄,高低错落,曲径通幽,每一处都有不同的观感。对于孩子们来说,这10余种不同的功能,似是隔断的却又实际上连为一体。在享受他们的同时,孩子们就好像走进迷宫的爱丽丝,在这个非同寻常的迷幻世界里充分享受空间带给他们的丰富体验。

This project is a children's club which is set up in Shanghai by a children's clothing brand"marco&mari",aimed to develop China's market.This"children's club"includes more than ten kinds of functions:clothing store,beauty salon,dancing room,theatre,cafe,playroom,library,children's classroom and so on.

Because the theme of"arch"which was previously used in Marco&Mari in Beijing successfully interpreted the properties of this children clothing brand,therefore,we further developed it into a maze.Taking advantage of ceiling height of4.6meter,we make a huge dome which is surrounded by alternate bending wall surfaces in order to divide different functional areas.The wall surfaces which continuously transform and use four kinds of different curvatures play a bearing role of supporting the two floors,and at the same time,meet more than ten kinds of functions'different requirements for dimension,form,openness and closure performance a n d c r e a t e d i ff e r e n t s e n s e o f space.And at the same time,every curved surface segments many space factors,such as clothing show,stair,reception and so on by taking advantage of height change in vertical direction.This design concept of"circular arch"is used in various spaces,such as furniture of clothing store,decoration of round ceiling,display shelf throughout bending wall.

Surrounded by numerous circular arches of different sizes,the space which is sometimes small or big,and sometimes is wide or narrow,is a winding path leading to a secluded place and every part has different impression.For children,the more than ten kinds of different functions seem to be separated but actually they are integrated.At the same time enjoying them,children,just like Alice in Wonder Land when she enters into maze,fully enjoy the rich experience that is brought by space in the unusual psychedelic world.

《中装》:为儿童设计空间,在设计思路上有什么特殊性?在这个项目中您遵守了哪些原则?

SAKO:以儿童的身高看到的空间和以大人的身高看到的空间视点是不同的。在考虑儿童空间的时候,从儿童的视点来考虑。因为空间的尺度感也不同,所以首先要将自己变成儿童来进行设计。

6岁儿童的视角水平垂直方向是成人的6/10左右,面积比的话也就是4/10以下。如果再考虑到低视点所造成的障碍,这个比率则更低。总之,以儿童为焦点认识的空间和成人完全不同,儿童是用他们与成人完全不同的方法来看世界的。

《中装》:这是一个儿童综合空间,在内部结构上的设计是否相对更为复杂?

SAKO:要适应服装店、美容室、舞蹈室、影视室、咖啡厅、游戏室、图书室、儿童教室、休息区等超过10种用途的各自必要的空间大小、风格、开放性和封闭性等,创造出各种各样的空间。连成人看起来都很复杂的空间,从视野范围稍微小一点的儿童的视点来看,各个场所既是隔断的,又是连续的,既各有千秋,又相映成趣。就像闯进迷宫的爱丽丝一样,在这个非日常性的空间里,尽情感受着难忘而丰富的体验。

《中装》:在颜色的选择上,您是怎么考虑的?您认为颜色对于一个儿童空间来说起到怎样的作用?

SAKO:与儿童相关的东西多是颜色鲜艳而丰富的,在格外显眼的空间设计上颜色也非常重要。在本次的设计中,我们认为比起完全纯白的抽象空间,有一些亲切感的空间会更好,所以在白色之外还运用了米色。

《中装》:建筑外部被植物覆盖,这个灵感从何而来?

信息时代的商业迷宫 篇7

大约10年前, 互联网泡沫的破灭让多达半数的电子商务企业折戟沉沙, 也让互联网经济从“非理性繁荣”骤然回归现实。然而, 如今电子商务已站稳脚跟。据估计, 美国的电子商务收入已占全国零售总额的9%, 而且现在有许多数字化零售企业都很赚钱。

这还只是刚刚开始, 很快, 电子商务与传统销售就会水乳交融, 让人分不清彼此, 也难以测量它所占的份额。这意味着零售商将能通过多种渠道与顾客互动, 包括网站、实体店、服务终端、直邮、呼叫中心、社交媒体、移动设备、电视、网络家电、上门服务等。

面对来势汹汹的信息化浪潮, 传统零售商除非采用全新视角, 把各种迥然不同的渠道整合成“全渠道”的一体化无缝式体验, 否则就很可能被时代淘汰。网购的优点在于:选择范围广, 易于搜索;价格实惠, 便于比较;非常方便, 不管是在家还是在工作单位都能进行。此外, 网络上有大量的商品评价和推荐信息。

为此, 传统零售商必须从头设计购物体验, 把网购和实体店购物两方面的体验完美地融合起来。零售商可以在顾客购物路径的每一个环节上利用各种先进的数字化工具, 设计富有吸引力的互动方式, 比如向顾客的移动设备发送优惠代码和优惠信息, 优化搜索关键词, 开展基于地理位置的优惠信息推送, 以及向通过外部信息平台进店的顾客提供有针对性的购物建议等。

传统零售商还必须把“实体店”这一网络零售商不具备的特色, 从累赘变成优势, 把逛商店变成一种令人兴奋、既娱乐又享受的体验, 用实体店来推动相关的网上销售。而在提升实体店的购物体验方面, 数字技术也能发挥作用, 比如公司可以用充满活力的互动屏幕取代死板的橱窗, 屏幕可显示天气或时间, 还能为顾客推荐产品, 并在闭店时段接受订货。

服装店主讲述进货“迷宫” 篇8

首次进货的迷途

在进货上,深圳的艾童第一次也栽了跟头。她在第一次进货前,对周围的同行出售的货品进行了仔细分析,发现他们的货大多是从当地的外贸小厂和批发市场进的,为了显示自己的商品跟他们不一样,艾童决定找一些更有特色的货源。她在网上看到很多人对杭州的外贸服装批发很推崇,于是在店铺装修期间舍近求远,到杭州的九星、中星等批发市场进了货。舟车劳顿、途中辛苦自不必说,她到了杭州后发现,很多批发商听说她是从深圳来的,都用很奇怪的眼光看她。等她带着1.5万元的货回到深圳,经营了一个多月之后,才慢慢发现原来这些商品在深圳的批发市场都有,而且批发价比她的进价低了一半。艾童这才明白,自己是守着金山要饭吃,明明周围有的是批发市场,却被她自作聪明地忽略了。

但更糟糕的是,由于她进第一批货前,没有仔细了解附近消费者的体形特点,无论她进的衬衫还是裤子,尺码都偏小了。店里的客人一批接一批,络绎不绝,很多都是被漂亮的装修吸引过来的,但是他们大多数是30岁以上的顾客,身形比较丰满,艾童进的尺码对他们而言都偏小了。每天只能做到两三百元的营业额,因为店租较低,艾童倒是没有赔钱,但她雇的店员说,按照开业后的客流量,如果店里的衣服尺码合适,一天可以达到1000元的流水。艾童知道自己还是掉进了首次进货的迷宫了。

练就选货的火眼金睛

在进货的历练中,顺德的许保英堪称个中高手。她的小店开在大良高坎路一条小的商业街上,5年来,这家位置并不算好的服装店,每个月都能为她带来近万元的收入,如今她已经是3家服装店的所有者,服装销售事业可谓是蒸蒸日上。

古人讲十年磨一剑,宝剑出鞘必然撼动天地,而许保英则可以说是5年练一眼,慧眼一亮便能看准热卖新款。许保英经营的是散货店,店里的衣服、鞋子、皮包都是她从批发市场上一手淘回来的,她说衣服“淘”对了,生意就好,否则跟顾客关系再熟,也不可能把衣服卖出去。说到进货的难度,许保英则练出了选货“快、准、狠”的本事,只有这样,才能挑到合适的货品,并将进货成本降到最低。

许保英说,她所以能准确进货,主要做到了三点:

一是掌握当地市场行情:出现了哪些新品种?销售趋势如何?社会存量多少?价格涨势如何?购买力状况如何?大体上心中有数。

二是编制要货计划,当然在进货过程中也可应变修改。

三是在进货时,首先到市场上转一转,比较一下各个市场和批发商的价格,因为服装批发“窜货”的情况非常多,常常一个市场里20元的商品,在另外一个市场15元就可以拿到,因此必须进行比较,然后再着手落实进货。

很多人对服装经营有一个认识,就是只拿新款,旧款即使好卖也不会再补货,以使店铺新品不断流动。但许保英却并不这样做。她从来不会因为某个款式是热销的旧款而不再进货,反而会抓住市场需求迅速补充货源,并且持续销售到势头减弱或者此款销完为止。因为热销款式一旦赢得市场认可,销售额便会屡创新高,这比试销其他款式容易得多,而且能够带来更大的利润。

一次她看中了一款新的女式羊毛大衣,款式很好,但她以前没有卖过此类款式,心里没底,就先进了5件,结果一天就卖完了。第二次她又大胆进了40件,3天销售一空。后来她每次补货都进30件,而且销售势头一直很好。

这些与许保英较高的服装审美水平有关,更重要的是善于搜集服装流行信息。她搜集的方法主要是听、看、访、查。

迷宫问题 篇9

1 游戏分析

本迷宫游戏在Authorware7.0中开发。游戏开始时,在界面上有一座迷宫和一个误入迷宫的老鼠。迷宫里有很多条路,大部分通向死胡同,只有少数可以通向出口,且出口只有一个。如果老鼠遇到死胡同,可以重新搜索其它的路,直到找到出口为止。

游戏的开发过程如图1所示。

2 游戏的总体设计

由分析可知,此游戏由两大部分组成:一是初始化状态,即设置背景及老鼠的初始状态;二是老鼠在迷宫中跑动,搜索出口,直到找到出口为止。在老鼠的跑动过程中,需要控制老鼠的跑动方向和跑动速度,用Authorware来开发此游戏,可把此项内容单独作为一部分,用交互图标来实现。本文采用左右方向键改变跑动方向,上下键改变跑动速度。其程序总体结构如图2所示。

3 游戏的详细设计及实现

3.1 程序初始化

初始化过程中,需要设置整个迷宫环境及老鼠的初始化状态。

3.1.1 设置迷宫环境

迷宫的每一条通路,都是由一面面的墙壁隔开而形成的。这里需要注意的是,每一面墙壁都必须单独占用一个显示图标,否则将无法设置老鼠当时跑动的空间大小,即两面墙壁之间的空间大小,这里可以把所有的墙壁(可用直线画出来)放到一个命名为“墙壁”的群组图标里面;另外,“出口”必须单独占用一个显示图标,以便于判断老鼠是否到达出口。

3.1.2 设置老鼠初始化状态

在计算图标中设置老鼠的所有初始化状态:

1)假设老鼠是方形的,计算其宽度:Rsize=INT(DisplayWidth@"老鼠"/2);定义老鼠此时的前进方向:Rdirection:=1,即为向上;用系统变量DisplayX(存放对象中心到演示窗口的左边界的距离)和DisplayY(存放对象中心到演示窗口的上边界的距离)定义老鼠位置:RatX:=DisplayX@"老鼠",RatY:=DisplayY@"老鼠";定义老鼠跑动速率(sec/in):RatRace:=0.1。

2)用Rect函数创建一个背景大小的矩形,为老鼠的跑动空间设置最大范围:Enclosure:=Rect(DisplayLeft@"背景",DisplayTop@"背景",DisplayLeft@"背景"+DisplayWidth@"背景",DisplayTop@"背景"+DisplayHeight@"背景")。

3)结合函数、变量和循环控制程序语句(repeat…with…),对群组图标“墙壁”里的所有墙壁进行操作,设置老鼠在每一时刻可以跑动的空间,即当时老鼠所处两面墙壁之间的空间。其核心代码如下:

3.2 方向及速度控制

设计方向及速度控制时,有个难点:一般情况下,大多都会想到使用“按键响应”来控制,但是经过笔者试验,发现按键交互不能确保方向键一直可以灵活使用,如果想要灵活使用方向键来控制方向及速度,使用“按键响应”的操作将会比较复杂。因此,本游戏采用“热区域响应”的方法来控制老鼠跑动的方向及速度,只需要将热区域设置成很小的一块,并放在一个不易被鼠标点击到的位置(如左上角),然后在其属性的“快捷键”中设置成方向键变量即可。左右上下方向键变量为:leftarrow,rightarrow,uparrow,downar-row。

本游戏中采用左右方向键改变跑动方向,上下键改变跑动速度。前进方向分为8个,向上为1,右上为2,按顺时针依次往下排列。方向示意图如图3所示。每按一下左方向键可控制老鼠逆时针转动一下头,按一下右方向键可控制老鼠顺时针转动一下头,其实现可用Test函数来实现。而速度的改变则可用if…then…语句来实现。具体实现如下:

逆时针转动方向:Rdirection:=Test(Rdirection=1,8,Rdirection-1),其含义为:如果Rdirection=1,则按一下左方向键使Rdirection=8,否则Rdirection=Rdirection-1。

顺时针转动方向:Rdirection:=Test(RatDirection=8,1,RatDirection+1),其含义为:如果Rdirection=8,则按一下右方向键使Rdirection=1,否则Rdirection=Rdirection+1。

加速:if RatRace>0.01 then RatRace:=RatRace*0.8,其含义为:按一下向上方向键,则Rate(sec/in)变为原来的0.8倍,缩短了跑动时间,即提高了速度。

减速:if RatRace<1 then RatRace:=RatRace*1.25,其含义为:按一下向下方向键,则Rate(sec/in)变为原来的1.25倍,增加了跑动时间,即降低了速度。

3.3 搜索出口

在搜索出口的过程中需要一边跑动,一边判断是否已到达出口,若没有到达,继续按照方向键的控制沿通路跑动,若已到达出口,则结束游戏,并表示祝贺。

1)移动控制

跑动需要老鼠移动位置,所以可用Authorware中的移动图标,采用“指向固定点”类型,设置老鼠的跑动目标为变量RatX和RatY,Rate(sec/in)设置成前面定义的变量RatRace。

在跑动过程中,根据老鼠跑动的方向不同,其坐标的变化也会不同。由方向示意图图2可知,当Rdirection为1和5时,横坐标将不会发生变化,而当Rdirection为2、3、4时,则横坐标+1,当Rdirection为6、7、8时,则横坐标-1;同理,当Rdirection为3和7时,纵坐标将不会发生变化,而当Rdirection为4、5、6时,则纵坐标+1,当Rdirection为1、2、8时,则纵坐标-1。设当前方向上新的坐标为(i,j),则其变动可设置如下[2]:

其中函数ValueAtIndex(anyList,index)的含义为:返回指定列表中指定位置的值。

本游戏中,当老鼠前面是墙壁时,是无法移动的,只有前面没有墙壁时才可移动老鼠。其核心代码如下:

以上代码设置均可在移动图标的附属计算机图标中设置。

2)判断是否到达出口

判断老鼠是否到达出口,可用决策图标中的计算分支结构结合Overlapping函数来判断,若两个显示对象“老鼠“和”出口“重叠放置,则Overlapping函数的值为真,即Overlapping(@"老鼠",@"出口").。

当老鼠到达出口后,可在“祝贺”显示图标的“计算”属性中改变RatRace的值,使其为一个很大的数(比如999999),让老鼠的跑动速度近似于0,以老鼠停在出口并结束整个游戏。

至此,迷宫游戏的设计制作全部结束,运行程序调试,然后打包生成即可。

4 结束语

Authorware是基于图标的可视化模式的编程工具,它的灵魂就是函数的使用。丰富的函数库使得Authorware具备了一般高级语言的功能,但是更加简洁和高效[3]。用Authorware开发的发迷宫游戏,就具有上述特点,而且还可打包生成单机版,也可打包生成网络版,支持迷宫游戏的在线管理。

摘要:Authorware7.0是一种基于设计图标和流程线结构的多媒体设计平台,它具有丰富的函数和程序控制功能,以及强大的交互控制能力。该文通过对基于Authorware的迷宫游戏的设计与实现过程的详细介绍,阐述了Authorware强大的交互功能和丰富的函数库的应用。

关键词:Authorware,迷宫游戏,交互,函数

参考文献

[1]袁海东.Authorware7.0教程[M].北京:电子工业出版社,2006.

[2]陈晔.利用Authorware软件开发贪食蛇游戏[J].电脑知识与技术,2007(5):1288-1289.

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【迷宫问题】相关文章:

花园迷宫05-22

走迷宫04-27

迷宫游戏06-24

走迷宫教案04-16

迷宫的作文04-21

迷宫设计教案04-25

迷宫探险记作文04-24

迷宫景观设计论文04-15

迷宫取宝周记04-13

潘神的迷宫影评04-19

上一篇:故障曲轴下一篇:智能调度算法