哪位高手帮忙看看代码 头痛 不知道是为什么
#include <stdio.h>#include <stdlib.h>
#define MAX 100/* 栈中最大元素个数 */
#define X 11 /*地图的第一维长度*/
#define Y 11
//-------------------------------------类型结构----------------------
typedef struct
{
int x; /* 行下标 */
int y; /* 列下标 */
int d; /* 运动方向 */
}DataType;
typedef struct
{ /* 顺序栈类型定义 */
int t; /* 指示栈顶位置 */
DataType s[MAX];
}PSeqStack;
//----------------函数声明-----------------------------------------
void Maze_Path(int Maze[X][Y],int x1,int y1,int x2,int y2); //迷宫求解主函数
PSeqStack *createEmptyStack_seq(void); //创建空栈
int isEmptyStack_seq(PSeqStack *pastack); //检测是否为空
void Push_Stack(PSeqStack *pastack,int x,int y,int d); //入栈
void Pop_seq(PSeqStack *pastack); //出栈
DataType Top_seq(PSeqStack *pastack); //取当前栈顶数据
void OutputPath(PSeqStack *st,int (*p)[Y]); //输出最终结果
//-----------迷宫数据-------------------------------------------------
int Maze[X][Y] =
{
1,1,1,1,1,1,1,1,1,1,1,//0
1,0,0,0,1,0,0,0,0,0,1,//1
1,1,1,0,1,0,1,1,1,1,1,//2
1,0,0,0,0,0,1,1,1,0,1,//3
1,0,1,1,1,1,1,0,0,0,1,//4
1,0,0,0,0,1,1,0,1,1,1,//5
1,0,1,1,0,0,1,0,0,0,1,//6
1,0,0,1,1,0,1,0,1,0,1,//7
1,1,0,1,1,0,1,1,1,0,1,//8
1,0,0,1,1,0,0,0,0,0,1,//9
1,1,1,1,1,1,1,1,1,1,1//10
//0 1 2 3 4 5 6 7 8 9 10
};
int direction[4][2]=
{
0,1, /*x不变,Y+1*/
1,0, /*X+1,Y不变*/
0,-1, /*X不变,Y-1*/
-1,0 /*X-1,Y不变*/
}; /*向四面运动时,X,Y的增减量,即方向*/
//--------主函数接口----------------------------------------------------
int main()
{
int x1,x2,y1,y2,i,j;/*入口,出口,循环变量声明*/
x1=9;
y1=1;
x2=1;
y2=9;
for(i=0;i<11;i++)
{
for(j=0;j<11;j++)
{
if(Maze[i][j]==1)
printf("\2 ");
else
printf(" ");
}
printf("\n");
}
printf("---------------------------------------------------------------\n");
Maze_Path(Maze,x1,y1,x2,y2);
return 0;
}
//------------迷宫求解主函数------------------------------------------------------
void Maze_Path(int Maze[X][Y],int x1,int y1,int x2,int y2)
{
int i,j,k,g,h;
PSeqStack *st;
DataType element;
st=createEmptyStack_seq();
Maze[x1][y1]=2; /* 从入口开始进入,作标记 */
Push_Stack(st,x1,y1,-1); /* 入口点进栈 */
Push_Stack(st,x1,y1,-1);
while (!isEmptyStack_seq(st))
{
element=Top_seq(st);
i=element.x;
j=element.y;
Pop_seq(st); /* 回退 */
for(k=element.d+1;k<=3;k++)
{ /* 依次试探每个方向 */
g = i + direction[k][0];
h = j + direction[k][1];
if(g==x2 && h==y2 && Maze[g][h]==0)
{ /* 走到出口点 */
Maze[g][h]=2;
Push_Stack(st,x2,y2,-1); /* 出口点进栈 */
OutputPath(st,Maze); /* 输出路径 */
return;
}
if(Maze[g][h]==0)
{ /*道路通畅,未免重复对走到没走过的点作标记 */
Maze[g][h]=2;
Push_Stack(st,g,h,k); /* 进栈 */
i=g;
j=h;
k=-1; /* 下一点转换成当前点 */
}
}
}
printf("未找到路径.\n"); /* 栈退完未找到路径 */
}
//---------------------------创建空栈--------------------------------------
PSeqStack *createEmptyStack_seq(void)
{
PSeqStack *pastack;
pastack = (PSeqStack *)malloc(sizeof(PSeqStack));
if (pastack == NULL)
printf("内存申请失败!! \n");
else
pastack->t = -1;
return pastack;
}
//------------检测是否为空--------------------------------------------
int isEmptyStack_seq(PSeqStack *pastack)
{
return pastack->t == -1;
}
//------------入栈操作:四个参数-------------------------------------
void Push_Stack(PSeqStack *pastack,int x,int y,int d)
{
if((pastack->t+1) >= MAX)
printf("堆栈溢出错误!\n");
else
{
pastack->t++;
pastack->s[pastack->t].x=x;
pastack->s[pastack->t].y=y;
pastack->s[pastack->t].d=d;
}
}
//------出栈-----------------------------------------------------------
void Pop_seq(PSeqStack *pastack)
{
if (pastack->t==-1)
printf("堆栈无元素错误!\n");
else
pastack->t--;
}
//取当前栈顶数据----------------------------------------------------
DataType Top_seq(PSeqStack *pastack)
{
return (pastack->s[pastack->t]);
}
//------------------输出结果----------------------------------
void OutputPath(PSeqStack *st,int (*p)[Y])
{
int i,j;
while(st->t >= 0)
{
p[st->s[st->t].x][st->s[st->t].y]=3;
st->t--;
}
for(i=0;i<11;i++)
{
for(j=0;j<11;j++)
{
if(Maze[i][j]==1)
printf("\2 ");
if(Maze[i][j]==2 || Maze[i][j]==0)
printf(" ");
if(Maze[i][j]==3)
printf("\1 ");
}
printf("\n");
}
}
这个代码主要实现的是计算出迷宫线路 在vc++6.0下运行 发现一个问题
在当前个这二维数组中算不出路线
如果把Maze[5][1]位置的值改为1 也就是不能通过 可以正常算出
我测试了下在不改动的情况下 与Maze[5][1]一同存储的k值为0
可是 在取出这个值的时候k的值却取出来的是3
其他的点我只看了大半 除了Maze[5][1]的k值有问题以外 其他的点的k值都没问题
不明白到底是为什么在这里出错 哪位大侠帮我看一看吧 虽然有点长