| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3826 人关注过本帖
标题:迷宫问题?
只看楼主 加入收藏
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
 问题点数:0 回复次数:29 
迷宫问题?
下面是我写的一个迷宫,我用随机数产生迷宫,然后寻找出口,可是老是输出找不到出口,于是把迷宫改小,输出迷宫,用眼睛扫描了一下,有些是有出口的,但输出却是找不到出口,不得不怀疑程序错了,可是我找了半天,还是找不到。
呵呵,麻烦大家帮我看一下,哪里不行。有写个迷宫的朋友也可以把你的代码发上来,我自已研究。谢谢!!!
以下是我的代码:
[size=2]/********************************************************
** Highlight software by yzfy(雨中飞燕) http:// *
*********************************************************/
#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;
}
[/size]

[[it] 本帖最后由 zjl138 于 2008-5-6 11:09 编辑 [/it]]
搜索更多相关主题的帖子: 迷宫 yzfy 眼睛 随机数 扫描 
2008-05-06 11:04
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
怎么字体不能改小,这样会不会太难看了?

i like linux...
2008-05-06 11:07
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
????其实我都不会怎么产生比较美观的迷宫的……很早以前看到一个帖子,不过当时看不懂……估计现在会很好了吧……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 11:10
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
这个字体已经很好啦。。。偶试验过很多个版本了。。。
觉得不好就自己手动改一下代码吧

[color=white]
2008-05-06 11:11
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
飞燕~~~~怎么产生游戏中那种实用的,美观的,一定有出路的迷宫??

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 11:13
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
生成迷宫就是随机遍历,构造一棵树就是了
如果你的路线不唯一,你又没有加遍历标记的话,小心死循环
其它的问题还在看当中

[color=white]
2008-05-06 11:14
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
这样吗?
怎么保证不会出现路径中有“两行的路”这样不美观的情况?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 11:16
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
http://blog.
这是我以前写的一个迷宫生成代码,比较垃圾。。。

[color=white]
2008-05-06 11:19
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
切~~~飞燕大姐,大家都知道你是牛,就不要谦虚了,越张狂越帅气越好,这样才有个性嘛……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 11:23
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
运行了下,非常完美……收藏了,谢谢飞燕姐…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-06 11:26
快速回复:迷宫问题?
数据加载中...
 
   



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

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