| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 601 人关注过本帖
标题:数据结构迷宫求解,出现问题,求大神解答!!谢谢
只看楼主 加入收藏
死亡代码
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2013-10-11
结帖率:75%
收藏
已结贴  问题点数:18 回复次数:5 
数据结构迷宫求解,出现问题,求大神解答!!谢谢
编译程序时,问题如图所示
图片附件: 游客没有浏览图片的权限,请 登录注册



#include<stdio.h>
#include<stdlib.h>
#define STACK_SIZE 100
#define EX_SIZE 10
#define COLUMN 8
#define ROW 8
typedef int Status;

/***************结构体定义*****************/
typedef struct{      //迷宫数据
    char ma[ROW][COLUMN];
    int row;
    int column;
}MazeType;
typedef struct{   //迷宫位置坐标
    int x;
    int y;
}PosType;
typedef struct{
    int ord;        //路径上的序号
    PosType seat;   //坐标位置
    int way;       //探索下一个方块的方向
}ElemType;
typedef struct{    //栈结构
    ElemType *base;
    ElemType *top;
    int stacksize;
}Sqstack;

/*********************函数定义**************/
Status InitStack(Sqstack &S)     //构造一个空栈
{
    S.base=(ElemType *)malloc(STACK_SIZE*sizeof(int));
    if(!S.base)
    {
        printf("申请内存空间失败!");
        return 0;
    }
    S.top=S.base;
    S.stacksize=STACK_SIZE;
    return 1;
}
Status Push(Sqstack &S,ElemType e)    //入栈
{
    *S.top++=e;
    return 1;
}
Status Gettop(Sqstack &S)     //获取栈顶元素
{
    ElemType e;
    if(S.top==S.base) return 0;
    e=*(S.top-1);
    return 1;
}
Status Pop(Sqstack &S,ElemType &e)       //删除栈顶元素
{
    if(S.top==S.base) return 0;
    e=*--S.top;
    return 1;
   
}
Status IsEmpty(Sqstack &S)   //判断栈是否为空
{
    if(S.top==S.base)  return 1;
    else return 0;
}
Status InitMaze(MazeType &M)         //初始化迷宫
{
         int i,j;        
         /*
M.row=8;
         M.column=8; //迷宫行和列数*/
         for(i=0;i<8;i++){//迷宫行外墙
                   M.ma[0][i]='#';
                   M.ma[7][i]='#';
         }
         for(i=0;i<8;i++){//迷宫列外墙
                   M.ma[i][0]='#';
                   M.ma[i][7]='#';
         }
   //迷宫图案
  M.ma[1][1]=' ';M.ma[1][2]='#';M.ma[1][3]='#';M.ma[1][4]='#';M.ma[1][5]=' ';M.ma[1][6]=' ';
  M.ma[2][1]=' ';M.ma[2][2]='#';M.ma[2][3]='#';M.ma[2][4]='#';M.ma[2][5]=' ';M.ma[2][6]=' ';
  M.ma[3][1]=' ';M.ma[3][2]=' ';M.ma[3][3]=' ';M.ma[3][4]=' ';M.ma[3][5]=' ';M.ma[3][6]='#';
  M.ma[4][1]=' ';M.ma[4][2]='#';M.ma[4][3]='#';M.ma[4][4]=' ';M.ma[4][5]=' ';M.ma[4][6]=' ';
  M.ma[5][1]=' ';M.ma[5][2]='#';M.ma[5][3]='#';M.ma[5][4]='#';M.ma[5][5]=' ';M.ma[5][6]=' ';
  M.ma[6][1]=' ';M.ma[6][2]=' ';M.ma[6][3]=' ';M.ma[6][4]=' ';M.ma[6][5]=' ';M.ma[6][6]=' ';
  
/*
for(i=1;i<8;i++)
    for(j=1;j<8;j++)
        {
            if(' '==M.ma[i][j])
                M.ma[i][j]='1';//初始化迷宫
        }*/
    return 1;
}
Status Pass(MazeType &M,PosType curpos)     //判断是否能通过
{
    if(' '==M.ma[curpos.x][curpos.y])
        return 1;
    else
        return 0;
}
Status FootPrint(MazeType &M,PosType curpos)   //打上通过的标记   “*”
{
    M.ma[curpos.x][curpos.y]='*';
    return 1;
}
PosType NextPos(PosType curpos,int i)     //往下一个方向探索
{
    PosType pos=curpos;
    switch(i)
    {
        case 1:pos.y+=1;
        break;
        case 2:pos.x+=1;
        break;
        case 3:pos.y-=1;
        break;
        case 4:pos.x-=1;
        break;
        default:exit(0);
        return pos;
    }
}
Status MarkPrint(MazeType &M,PosType curpos)
{
    M.ma[curpos.x][curpos.y]='@';
    return 1;   
}
Status PrintMaze(MazeType &M)      //输出迷宫
{
    int i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            printf("%c",M.ma[i][j]);
        }
        printf("\n");
    }
    return 1;
}
Status MazePath(MazeType M,PosType start,PosType end)    //求一条迷宫路径
{
    Sqstack S;
    PosType curpos;
    int curstep=1;
    ElemType e;
    InitStack(S);    //构造空栈
    curpos=start;    //最开始在入口位置
    do
    {
        if(Pass(M,curpos))
        {
            FootPrint(M,curpos);
            e.ord=curstep;
            e.seat=curpos;
            e.way=1;
            Push(S,e);
            if(curpos.x==end.x&&curpos.y==end.y) return 1;
            curpos=NextPos(curpos,1);
            curstep++;
        }
        else
        {
            if(!IsEmpty(S))
            {
                Pop(S,e);
                while(e.way==4&&!IsEmpty(S))
                {
                    MarkPrint(M,e.seat);
                    Pop(S,e);
                }
                if(e.way<4)
                {
                    e.way++;
                    Push(S,e);
                    curpos=NextPos(e.seat,e.way);
                }
            }
        }
    }while(!IsEmpty(S));
    return 1;
}
int main()
{
    MazeType maze;
    maze.row=8;
    maze.column=8;
    InitMaze(maze);
    PosType start,end;
    start.x=1;
    start.y=1;
    end.x=6;
    end.y=6;
    PrintMaze(maze);
    MazePath(maze,start,end);
    PrintMaze(maze);
    system("pause");
    return 0;   
}
搜索更多相关主题的帖子: include 结构体 如图所示 
2014-04-21 21:41
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:18 
我把源文件扩展名写为.cpp

运行结果如下:

########
# ###  #
# ###  #
#     ##
# ##   #
# ###  #
#      #
########
########
# ###  #
# ###  #
#     ##
# ##   #
# ###  #
#      #
########
请按任意键继续. . .


只有警告如下:

1>c:\users\lenovo\desktop\consoleapplication1\consoleapplication1\源.cpp(76): warning C4101: “j”: 未引用的局部变量
1>c:\users\lenovo\desktop\consoleapplication1\consoleapplication1\源.cpp(133): warning C4715: “NextPos”: 不是所有的控件路径都返回值


不知道我运行的结果是否是楼主想要的?因为楼主没有说下自己的思路所以不愿意深入看代码了。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-04-22 22:20
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
PS:运行之前我对代码重新排版了(并未修改)

所以warning提示的行数可能与你给出的代码不是很相符。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-04-22 22:22
死亡代码
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2013-10-11
收藏
得分:0 
回复 3 楼 蚕头燕尾
已解决,谢谢
2014-04-23 14:23
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
到底是什么错误,说出来也好让大家长长见识


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-04-23 18:18
死亡代码
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2013-10-11
收藏
得分:0 
回复 5 楼 蚕头燕尾
是我代码出错了,NextPos函数和MazePath函数部分
NextPos的返回值pos应在switch大括号之外
MazePath应定义成 &M  以实现引用传值
结果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

(代码有所改动)
2014-04-23 20:51
快速回复:数据结构迷宫求解,出现问题,求大神解答!!谢谢
数据加载中...
 
   



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

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