| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 1553 人关注过本帖
标题:迷宫问题?
收藏  订阅  推荐  打印

迷宫问题?

下面是我写的一个迷宫,我用随机数产生迷宫,然后寻找出口,可是老是输出找不到出口,于是把迷宫改小,输出迷宫,用眼睛扫描了一下,有些是有出口的,但输出却是找不到出口,不得不怀疑程序错了,可是我找了半天,还是找不到。
呵呵,麻烦大家帮我看一下,哪里不行。有写个迷宫的朋友也可以把你的代码发上来,我自已研究。谢谢!!!
以下是我的代码:
引用:
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include<iostream>
#include<ctime>
using namespace std;
const int m=5,p=5;                           //迷宫的行数和列数
struct offsets                                 //前进方向表的结构定义
{
    int a,b;                                  //a,b是x,y(SeekPath函数参数)方向的偏移
    char *dir;                                 //dir是方向
};
offsets move[8];                               //各个方向的偏移表
int Maze[m+2][p+2];                            //迷宫定义
int mark[m+2][p+2];                            //访问标记数组
int main()
{
    int SeekPath(int,int);
    int i,j;
    srand(unsigned(time(NULL)));

    offsets move[8]={{-1,0,"N"},{-1,1,"NE"},{0,1,"E"},{1,1,"SE"},
    {1,0,"SE"},{1,-1,"SW"},{0,-1,"W"},{-1,-1,"NW"}};
    for(i=0;i<m+2;i++)                               //用随机数产生为宫
    {
        for(j=0;j<p+2;j++)
            Maze[i][j]=rand()%2;
    }
    for(i=0;i<m+2;i++)                               //访问标记数组初始为零
        for(j=0;j<p+2;j++)
            mark[i][j]=0;
    cout<<"The maze is:"<<endl;                      //输出刚才产生的迷宫
    for(i=0;i<m+2;i++)
    {
        for(j=0;j<p+2;j++)
            cout<<Maze[i][j];
        cout<<endl;
    }
    mark[1][1]=1;                                     //从入口[1][1]开始
    if(SeekPath(1,1))                                 //调用求解迷宫的递归算法
        cout<<"("<<1<<","<<1<<"(,"<<"Direction"<<"E"<<endl;
    system("pause");
    return 0;
}
int SeekPath(int x,int y)
{
    //从迷宫某一位置开始,寻找通向出口[M][P]的一条路径。如果找到,返回1,否刚返回0;
    //试探的出发点为[1][1].
    int i,g,h;                                      //用G,H记录位置信息,DIR记方向
    char *d;
    if(x==m&&y==p)
        return 1;                                   //到达出口,返回1;
    for(i=0;i<8;i++)
    {
        g=x+move[i].a;               
        h=y+move[i].b;
        d=move[i].dir;                           //找下一位置和方向(a,b,dir)
        if(Maze[g][h]==0&&mark[g][h]==0)
        {
            mark[g][h]=1;
            if(SeekPath(g,h))                     //从此位置递归试探
            {
                cout<<"("<<g<<","<<h<<"),"<<"Direction"<<move[i].dir<<",";
                return 1;     //试探成功,逆向输出路径坐标
            }
        }
    }
    if(x==1&&y==1)
        cout<<"no path in Maze"<<endl;
    return 0;
}


[ 本帖最后由 zjl138 于 2008-5-6 11:09 编辑 ]

TOP

怎么字体不能改小,这样会不会太难看了?
i like linux...

TOP

????其实我都不会怎么产生比较美观的迷宫的……很早以前看到一个帖子,不过当时看不懂……估计现在会很好了吧……
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

这个字体已经很好啦。。。偶试验过很多个版本了。。。
觉得不好就自己手动改一下代码吧

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

飞燕~~~~怎么产生游戏中那种实用的,美观的,一定有出路的迷宫??
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

生成迷宫就是随机遍历,构造一棵树就是了
如果你的路线不唯一,你又没有加遍历标记的话,小心死循环
其它的问题还在看当中

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

这样吗?
怎么保证不会出现路径中有“两行的路”这样不美观的情况?
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

http://blog.programfan.com/article.asp?id=24276
这是我以前写的一个迷宫生成代码,比较垃圾。。。

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

切~~~飞燕大姐,大家都知道你是牛,就不要谦虚了,越张狂越帅气越好,这样才有个性嘛……
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

运行了下,非常完美……收藏了,谢谢飞燕姐…………
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

共有 1552 人关注过本帖
发新话题
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.065127 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved