| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2723 人关注过本帖
标题:迷宫求解问题,运行不出来,求大神给看看。
取消只看楼主 加入收藏
春风吹又吹
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-10-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
迷宫求解问题,运行不出来,求大神给看看。
#include<stdio.h>
#include<malloc.h>
#define M 8
#define N 10
typedef int elemtype;
typedef struct{
elemtype *base;
elemtype *top;
int stacksize;
}sqstack;
typedef struct{
    int a,b,dir;
}offsets;
typedef struct{
    int x,y,dr;
}elemstack;
int initstack(sqstack &s)
{
    s.base=(elemtype *)malloc(80 *sizeof(elemtype));
    if(!s.base) return 0;
    s.top=s.base;
    s.stacksize=80;
    return 1;
}
int push(sqstack &s,elemstack &temp)
{
if(s.top-s.base>=s.stacksize)
    {    s.base=(elemtype *)realloc(s.base,(s.stacksize+10)*sizeof(elemtype));
        if(!s.base) return 0;
        s.top=s.base+s.stacksize;
        s.stacksize+=10;
    }
    *s.top=temp;
    s.top++;
    return 1;

}
elemtype pop(sqstack &s,elemstack &temp)
{
    if(s.top==s.base) return 0;
    s.top--;
    *s.top=temp;
    return 1;
}

void path(int maze[M][N],offsets move[4])
{
    elemstack temp;
    sqstack s;
    int g,h,d,i,j;
    int    mark[1][0]=2;
    initstack(s);
    int p=6,q=8;
    temp.x=1;temp.y=1;temp.dr=1;
    push(s,temp);
    while(s.top!=s.base)
    {
        pop(s,temp);
        i=temp.x;j=temp.y;d=temp.dr;
        while(d<=4)
        {
            g=i+move[d].a;h=j+move[d].b;
            if(g==p&&h==q)
            {
                printf("(%d,%d)",p,q);
                while(s.top!=s.base)
                {
                    pop(s,temp);
                    printf("(%d,%d)",temp.x,temp.y);
                }
            }
            if(!maze[g][h]&&!mark[g][h])
            {
                mark[g][h]=2;
                temp.x=i;temp.y=j;temp.dr=d;
                push(s,temp);
                i=g;j=h;d=1;
            }
            else d++;

        }
    }   
printf("no path in maze!");
}


int main()
{
    int maze[M][N]={
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 0, 0, 1, 1, 0, 1, 1, 1, 1,
    1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
    1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
    1, 0, 1, 1, 1, 0, 1, 1, 1, 1,
    1, 1, 0, 0, 1, 0, 0, 0, 0, 1,
    1, 0, 1, 1, 0, 1, 1, 1, 0, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    };
/*    int i,j;
    for(i=0;i<m;i++)
    {for(j=0;j<n;j++)
        {
            printf("%d  ",a[i][j]);
        }
    printf("\n");
    }
*/
    offsets move[4]={{1,0,1}{0,1,2}{-1,0,3}{0,-1,4}};
     path(maze[][], move[]);
/*    int i,j;
    for(i=0;i<m;i++)
    {for(j=0;j<n;j++)
        {
            printf("%d  ",a[i][j]);
        }
    printf("\n");
    }
*/


    return 0;
}
搜索更多相关主题的帖子: return include 
2016-10-24 20:54
春风吹又吹
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-10-22
收藏
得分:0 
你好,我这个程序是要利用栈的有关知识解决迷宫问题,调用path函数同时输出迷宫中从入口1.1位置到出口6.8的依次经过的位置,你帮忙给看看path这个函数,或者帮我编一个函数来解决迷宫问题,谢谢😊
2016-10-25 12:07
春风吹又吹
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-10-22
收藏
得分:0 
1.学x,y代表二维数组的坐标,0代表能走,1代表墙,dir代表上下左右四个方向
2.我设计的maze数组中因为0代表能走的的位置,所以从起点1.1到终点6.8只有一条路能走,然后再利用每次经过的位置和方向入栈先存着,再继续探索下一个为0的位置再入栈,直到找到终点位置,然后再让栈中的数据依次出栈且输出位置。
3.我对这个迷宫的输出没什么要求,只要能最后输出这个迷宫的起点到终点的依次经过的位置就行了
2016-10-25 15:51
春风吹又吹
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-10-22
收藏
得分:0 
1.学x,y代表二维数组的坐标,0代表能走,1代表墙,dir代表上下左右四个方向
2.我设计的maze数组中因为0代表能走的的位置,所以从起点1.1到终点6.8只有一条路能走,然后再利用每次经过的位置和方向入栈先存着,再继续探索下一个为0的位置再入栈,直到找到终点位置,然后再让栈中的数据依次出栈且输出位置。
3.我对这个迷宫的输出没什么要求,只要能最后输出这个迷宫的起点到终点的依次经过的位置就行了
2016-10-25 15:52
春风吹又吹
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-10-22
收藏
得分:0 
哇塞,厉害,谢谢你啦😄,我再理解理解看看
2016-10-26 11:04
快速回复:迷宫求解问题,运行不出来,求大神给看看。
数据加载中...
 
   



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

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