• C语言之算法初步(电子老鼠闯迷宫递归算法)


      发现递归算法真的是个神奇的东西,还会自己在栈中记录下以前的数据,可以按照以前的记录返回到起始点,这个电子老鼠走迷宫是个很好的例子。研究了一个下午,总算还是有点收获的,突然对扫雷这个游戏有点感悟了。其实都是相同的道理。

    电子老鼠闯迷宫代码如下:

    代码
    #include<stdio.h>
    int flag=0; //flag用来标记是否路径全部走完
    int a[12][12]={{1,1,1,1,1,1,1,1,1,1,1,1}, // 初始化迷宫
    {1,0,0,0,0,0,0,0,0,0,0,1},
    {
    1,0,1,1,1,1,1,1,1,1,1,1},
    {
    1,0,1,0,0,0,1,0,0,0,1,1},
    {
    1,0,1,0,1,0,1,0,1,0,1,1},
    {
    1,0,1,0,1,0,1,0,1,0,0,1},
    {
    1,0,1,0,1,0,1,0,1,0,0,1},
    {
    1,0,1,0,1,0,1,0,1,1,0,1},
    {
    1,0,1,0,1,0,1,0,1,1,0,1},
    {
    1,0,1,0,1,0,1,0,1,1,0,1},
    {
    1,0,0,0,1,0,0,0,1,1,0,1},
    {
    1,1,1,1,1,1,1,1,1,1,1,1}};

    int go(int x,int y)
    {
    a[x][y]
    =2;
    if((x==10&&y==10)) //迷宫出口设置为10,10
    flag=1;
    if(flag!=1&&a[x-1][y]==0) //判断向上是否有路
    go(x-1,y); //这个go()纠结了好久,多了个return怎么都不行了
    if(flag!=1&&a[x][y+1]==0) //判断向右是否有路
    go(x,y+1);
    if(flag!=1&&a[x+1][y]==0) //判断向下是否有路
    go(x+1,y);
    if(flag!=1&&a[x][y-1]==0) //判断向左是否有路
    go(x,y-1);
    if(flag!=1)
    a[x][y]
    =0;
    return flag;
    }

    main()
    {
    int i,j,k,l,q;
    for(i=0;i<12;i++) //输出迷宫
    {
    for(j=0;j<12;j++)
    {
    if(a[i][j]==0)
    printf(
    "");
    if(a[i][j]==1)
    printf(
    "X");
    }
    printf(
    "\n");
    }
    printf(
    "\n");
    if(go(1,1)==0) //设置了起始点为1,1
    printf("没有路径!\n");
    else
    for(k=0;k<12;k++) //输出迷宫
    {
    for(l=0;l<12;l++)
    {
    if(a[k][l]==0)
    printf(
    "");
    if(a[k][l]==1)
    printf(
    "X");
    if(a[k][l]==2)
    printf(
    "*");
    }
    printf(
    "\n");
    }
    }

    这次是在递归回调的时候多加了个return 导致结果回到起始点就停止了,后来发现原来是自己跟上次的斐波那契数列的计算给搞混了,害我浪费了N久时间,悲剧啊!

  • 相关阅读:
    re模块
    正则表达式
    python-函数基础(*arge **kwargs)
    Python-类基础
    Python内置函数
    有些事情自己知道就好
    jquery和dom之间的转换
    Jquery中attr和prop的区别
    thinkphp一对多HAS_MANY
    thinkphp表单自动验证
  • 原文地址:https://www.cnblogs.com/ruofengzhishang/p/1938627.html
Copyright © 2020-2023  润新知