给二维数组,存(0,0) -> (m, n)个点,就是一个m * n 的网格, 从左上角(0......

给二维数组,存(0,0) -> (m, n)个点,就是一个m * n 的网格,
 从左上角(0,0)走到右下角(m,n)只能向右走或者向下走,有多

 少种走法,打印每一种走法。


/*==========================================================*\
 给二维数组,存(0,0) -> (m, n)个点,就是一个m * n 的网格,
 从左上角(0,0)走到右下角(m,n)只能向右走或者向下走,有多
 少种走法,打印每一种走法。
\*==========================================================*/
#include <iostream>
#include <deque>

using namespace std; 

struct position{
	int x;
	int y;
};

position *stepX(position *pCurrent){
	position *newStep = new position();
	newStep->x = pCurrent->x + 1;
	newStep->y = pCurrent->y;
	return newStep;
}

position *stepY(position *pCurrent){
	position *newStep = new position();
	newStep->x = pCurrent->x;
	newStep->y = pCurrent->y + 1;
	return newStep;
}

void path(int widthM,int heightN,deque<position *> &dq){
	int endM = widthM - 1;
	int endN = heightN - 1;
	if(dq.back()->x == endM && dq.back()->y == endN){
		deque<position *>::iterator it = dq.begin();
		while (it != dq.end()){
			cout << "[" << (*it)->x << "," << (*it)->y << "]" << " ";
			it++;
		}
		cout << endl;
		return ;
	}else if(dq.back()->y > endN){
		return ;
	}else if(dq.back()->x > endM){
		return ;
	}else{
		position *newStep = stepX(dq.back());
		dq.push_back(newStep);
		path(widthM,heightN,dq);
		dq.pop_back();
		newStep = stepY(dq.back());
		dq.push_back(newStep);
		path(widthM,heightN,dq);
		dq.pop_back();
	}
}

int main(){
	deque<position *> dq;
	position *newStep = new position;
	newStep->x = 0;
	newStep->y = 0;
	dq.push_back(newStep);
	path(2,3,dq);
	system("pause");
	return 1;
}

转载于:https://my.oschina.net/dapengking/blog/117512

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值