Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1348712
  • 博文数量: 370
  • 博客积分: 10654
  • 博客等级: 中将
  • 技术积分: 4396
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 15:44
文章分类

全部博文(370)

文章存档

2012年(36)

2011年(195)

2010年(139)

分类: C/C++

2010-10-25 22:13:30

                          小小电脑鼠走迷宫

//主要用递归的简易算法
#include
#include
 
int starti = 1, startj = 1;        //入口
int endi = 10, endj = 10;            //出口
int success = 0;                   //成功
int maze[12][12] = { //2表示有墙  0表示道路畅通
    {2,2,2,2,2,2,2,2,2,2,2,2},
    {2,0,0,0,0,0,0,0,0,0,2,2},
    {2,0,2,2,2,0,2,0,0,2,0,2},
    {2,0,0,0,2,0,2,0,0,2,0,2},
    {2,0,2,0,2,0,2,0,0,2,0,2},
    {2,0,0,0,0,0,2,0,2,2,0,2},
    {2,0,2,2,2,2,2,0,0,0,0,2},
    {2,0,2,2,2,2,2,2,2,0,0,2},
    {2,0,2,2,2,0,0,0,0,0,0,2},
    {2,0,2,2,2,0,2,2,2,2,0,2},
    {2,0,0,0,0,0,0,0,0,0,0,2},
    {2,2,2,2,2,2,2,2,2,2,2,2}
};
 
 int main(int argc , char **argv)
{
 
    int i,j;
 
    printf("\n迷宫显示:\n");
    for(i = 0; i < 12; i++)
    {
        for(j = 0; j < 12; j++)
        //{
            if(maze[i][j] == 2)
                printf("|");
            else 
                printf(" ");
        //}
        printf("\n");
    }
    printf("\n\n给小老鼠10秒钟的思考时间:\n\n");
    sleep(5);
 
    if(visit(starti,startj) == 0)
    {
        printf("没有找到出口\n");
    }
    else
    {
        printf("\n路径选择\n");
        for(i = 0; i < 12; i++)
        {
            for(j = 0; j < 12; j++)
            {         
                if(maze[i][j] == 2)
                    printf("|");
                else if (maze[i][j] == 1)
                    printf("*"); //*表示小老鼠
 
                else 
                    printf(" ");
     
            }
            printf("\n");
        }
    }
    return 0;
 }
 //程序的核心算法体现在这里,利用递归算法,由于我是设置的从坐标(1,1) 至(10,10),所以算法这里先进行j+1 i+1 在进行i-1 j-1;
 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 - 1][j] == 0)
         visit(i - 1,j);
     
     if(success != 1 && maze[i][j - 1] == 0)
         visit(i,j - 1);
 
     if(success != 1)
         maze[i][j] == 0;
 
     return success;
 } 
阅读(777) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~