| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1836 人关注过本帖
标题:老鼠走迷宫1.0
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:5 回复次数:2 
老鼠走迷宫1.0
九九已经不是第一次写迷宫了~不过没事还是去看看资料敲敲代码~

程序代码:
/*
    老鼠走迷宫是递归回求解的基本题型,我们在二维阵列中用使用2
表示迷宫墙壁,使用1来表示老鼠的行走的路径,试以程式求出由入口
至出口的路径
    解法
    老鼠的走法有上、下、左、右四个方向,在每前进一格之后就
选一个方向前进,无法前进时退回选择下一个可前进的方向,如此
在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,
请直接看程式应就可以理解*/
#include<stdio.h>
#include<stdlib.h>

#define N 7

int visit(int ,int );
void print();

int maze[N][N]=
{
    {2,2,2,2,2,2,2},
    {2,0,0,0,0,0,2},
    {2,0,2,0,2,0,2},
    {2,0,0,2,0,2,2},
    {2,2,0,2,0,2,2},
    {2,0,0,0,0,0,2},
    {2,2,2,2,2,2,2},
};

int startI=1;
int startJ=1;//入口

int endI=5;
int endJ=5;//出口

int success=0;

int main()
{
    if (visit(startI,startJ)==0)
        puts("\n没有找到出口");
    else
        print();

    return 0;
}
int visit(int i,int j)
{
    maze[i][j]=1;

    if (i==endI&&j==endJ)
        success=1;

    if (success!=1&&maze[i][j+1]==0)
        visit(i,j+1);

    if (success!=1&&maze[i+1][j]==0)
        visit(i+1,j);

    if (success!=1&&maze[i][j-1]==0)
        visit(i,j-1);

    if (success!=1&&maze[i-1][j]==0)
        visit(i-1,j);

    if (success!=1)
        maze[i][j]=0;

    return success;
}

void print()
{
    int i=0;
    int j=0;

    puts("显示迷宫");

    for (i=0;i!=N;++i)
    {
        for (j=0;j!=N;++j)
            if (maze[i][j]==2)
                putchar('#');
            else if (maze[i][j]==1)
                putchar('o');
            else
                putchar(' ');

        puts("");
    }
}
搜索更多相关主题的帖子: color 老鼠 资料 
2017-03-04 08:18
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
然后把程序稍稍改进了一下~

程序代码:
/*
    老鼠走迷宫是递归回求解的基本题型,我们在二维阵列中用使用2
表示迷宫墙壁,使用1来表示老鼠的行走的路径,试以程式求出由入口
至出口的路径
    解法
    老鼠的走法有上、下、左、右四个方向,在每前进一格之后就
选一个方向前进,无法前进时退回选择下一个可前进的方向,如此
在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,
请直接看程式应就可以理解*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>


#define N 7

int visit(int ,int );
void print();

int maze[N][N]=
{
    {2,2,2,2,2,2,2},
    {2,0,0,0,0,0,2},
    {2,0,2,0,2,0,2},
    {2,0,0,2,0,2,2},
    {2,2,0,2,0,2,2},
    {2,0,0,0,0,0,2},
    {2,2,2,2,2,2,2},
};

int startI=1;
int startJ=1;//入口

int endI=5;
int endJ=5;//出口

int success=0;

int main()
{
    if (visit(startI,startJ)==0)
        puts("\n没有找到出口");
    else
        print();

    return 0;
}
int visit(int i,int j)
{
    int k=0;

    maze[i][j]=1;

    if (i==endI&&j==endJ)
        success=1;

    for (k=0;k<4&&success!=1;++k)
    {
        int t=(k/2+1)*(1-2*(k%2));
    
        if (maze[i+t%2][j+(t+1)%2]==0)
            visit(i+t%2,j+(t+1)%2);
    }

    if (success!=1)
        maze[i][j]=0;

    return success;
}

void print()
{
    int i=0;
    int j=0;

    char s[]={" o#"};

    puts("显示迷宫");

    for (i=0;i!=N;++i)
        for (j=0;j!=N+1;++j)
            putchar(j!=N?s[maze[i][j]]:'\n');
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-04 10:15
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
//支持一个
#include<stdio.h>
#include<stack>
#define N 7
int maze[N][N]=
{
    {2,2,2,2,2,2,2},
    {2,0,0,0,0,0,2},
    {2,0,2,0,2,0,2},
    {2,0,0,2,0,2,2},
    {2,2,0,2,0,2,2},
    {2,0,0,0,0,0,2},
    {2,2,2,2,2,2,2},
};
int startI=1;
int startJ=1;//入口

int endI=5;
int endJ=5;//出口
const short UNEXPLORED=0,EAST=1,WEST=2,NORTH=3,SOUTH=4;
struct Position{short x;short y;short outway;};
Position pos;
std::stack<Position> st;
bool WayOut()
{
    while(1)
    {
        if(pos.x==endI&&pos.y==endJ) return true;
        if((!maze[pos.x+1][pos.y])&&pos.outway==UNEXPLORED)
        {
            maze[++pos.x][pos.y]=1;pos.outway=UNEXPLORED;
            st.push(pos);continue;
        }
        if((!maze[pos.x-1][pos.y])&&pos.outway==EAST)
        {
            maze[--pos.x][pos.y]=1;pos.outway=UNEXPLORED;
            st.push(pos);continue;
        }
        if((!maze[pos.x][pos.y-1])&&pos.outway==WEST)
        {
            maze[pos.x][--pos.y]=1;pos.outway=UNEXPLORED;
            st.push(pos);continue;
        }
        if((!maze[pos.x][pos.y+1])&&pos.outway==NORTH)
        {
            maze[pos.x][++pos.y]=1;pos.outway=UNEXPLORED;
            st.push(pos);continue;
        }
        pos.outway++;
        if(pos.outway==SOUTH)
        {
            st.pop();
            if(st.empty()) return false;
            else pos=st.top();
        }
    }
}
int main()
{
    pos.x=startI;pos.y=startJ;
    maze[pos.x][pos.x]=1;pos.outway=UNEXPLORED;
    st.push(pos);
    if(WayOut()) printf("有路");else printf("没有路");
    return 0;
}
2017-03-04 16:12
快速回复:老鼠走迷宫1.0
数据加载中...
 
   



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

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