路径条数 (迷宫问题的递归方法)

网格,m*n ,机器人从左上角抵达右下角,可能存在的路径条数,并输出所有路径。

(2,5)到(1,1)的路径。

#include<iostream>
#include<stdlib.h>
#define MaxSize 10
#define M 2
#define N 2
using namespace std;
typedef struct
{
    int i;//方块行号
    int j;//方块列号
}Box;    //方块的类型
typedef struct
{
    Box data[MaxSize];//c存放一条路径上的所有方块
    int length;       //迷宫路径的长度
}PathType; //迷宫路径的类型
int mg[M][N]={0};
//int c=0;
void mgpath(int xi,int yi,int xe,int ye,PathType path)
{
    int d,k,i,j;
    if(xi==xe&&yi==ye)               //找到出口,输出一个路径
    {
        path.data[path.length].i=xi;//将(xi,yi)添加到path中
        path.data[path.length].j=yi;
        path.length++;
        for(k=0;k<path.length;k++)
             cout<<"\t"<<"("<<path.data[k].i<<","<<path.data[k].j<<")";
        cout<<endl;
    }
    else                          //(xi,yi)不是出口
    {
        if(mg[xi][yi]==0)
        {
            d=0;
            while(d<2)
            {
                path.data[path.length].i=xi;
                path.data[path.length].j=yi;
                path.length++;    //路径长度加1
                switch(d)
                {
                    case 0:
                        i=xi;j=yi-1;break;
                    case 1:
                        i=xi-1;j=yi;break;
                }
                mg[xi][yi]=-1;    //
                mgpath(i,j,xe,ye,path);
                mg[xi][yi]=0;
                path.length--;
                d++;
            }
        }
    }
}
int main()
{
    PathType path;
    path.length=0;
    cout<<"机器人从(m,n)位置到(1,1)位置(m=2,n=2)"<<endl;
    //cout<<c<<endl;
    cout<<"所有路径如下"<<endl;
    mgpath(M,N,1,1,path);
    return 0;
}






评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值