zoukankan      html  css  js  c++  java
  • 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久时间,悲剧啊!

  • 相关阅读:
    【动态规划】CDOJ1651 Uestc的命运之旅
    【动态规划】【二分】CDOJ1006 最长上升子序列
    【动态规划】CDOJ1271 Search gold
    【概率dp】【滚动数组】CDOJ1652 都市大飙车
    【混合背包】CDOJ1606 难喝的饮料
    【状压dp】CDOJ1608 暑假集训
    【构造】CDOJ1607 大学生足球联赛
    【二分】Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market
    【动态规划】Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
    HBase简介
  • 原文地址:https://www.cnblogs.com/ruofengzhishang/p/1938627.html
Copyright © 2011-2022 走看看