标题:哪位高手帮忙看看代码 头痛 不知道是为什么
取消只看楼主
wangzijia886
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-1-10
 问题点数:0 回复次数:1 
哪位高手帮忙看看代码 头痛 不知道是为什么
#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值都没问题
不明白到底是为什么在这里出错 哪位大侠帮我看一看吧 虽然有点长
搜索更多相关主题的帖子: 元素 地图 include 运动 
2012-01-10 00:37
wangzijia886
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-1-10
得分:0 
哪位高手帮忙看看
2012-01-10 10:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359443-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.248728 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved