迷宫求解算法的思路【C】
迷宫的问题比较复杂,而且这种问题交给计算机来解决反而浪费时间(计算机在某些方面表现非常傻,就是“勤奋的傻瓜”),但是十分复杂的问题还可以使用一下。
目前还没有做过这种题目,但是自己还不太会写,省的到时候也没用书看,代码想不起来,留作备份吧。
#include <stdio.h>
#include <stdlib.h>
//迷宫定义如下
#define m 6
#define n 8;
int maze[m+2][n+2];
//move数组定义如下,共8个方向
typedef struct
{
int x,y;
} item;
item move[8];//共8个方向
//新点的坐标
i=x+move[v].x;
j=y+move[v].y;
//栈的定义
typedef struct
{
int x,y,d;//横纵坐标及其方向
} datatype;//这是一个数据类型
typedef struct snode
{
datatype data;
struct snode *next;
} StackNode;
*LinkStack;
//迷宫求解算法
int path(int maze[][],item move[])
{
StackNode *s;
datatype temp;
int x,y,d,i,j;
s=Init_SeqStack();//创建一个栈的函数
temp.x=1;
temp.y=1;
temp.d=-1;//方向置为-1,循环前先加1
Push_SeqStack(s,temp);//将temp入栈s
while(!Empty_SeqStack(s))
{
Pop_SeqStack(s,&temp);
x=temp.x;
y=temp.y;
d=temp.d+1;
while(d<8)
{
i=x+move[d].x;
j=y+move[d].y;
if(maze[i][j]==0)
{
temp= {x,y,d};
Push_SeqStack(s,temp);
x=i;
y=j;
maze[x][y]=-1;
if(x==m&&y==n)
return 1;
else
d=0;
}
else
d++;
}
}
return 0;//迷宫无路可走
}
int main()
{
return 0;
}