3251: 【基础】卒的遍历

题目描述

在一张n*m的棋盘上(如6行7列)的最左上角(1,1)的位置有一个卒。该卒只能向下或者向右走,且卒采取的策略是先向下,下边走到头就向右,请问从(1,1)点走到(n,m)点可以怎样走,输出这些走法。

3251: 【基础】卒的遍历_第1张图片

输入

两个整数n,m代表棋盘大小(3=

输出

卒的行走路线

样例输入 复制
3 3
样例输出 复制
1:1,1->2,1->3,1->3,2->3,3
2:1,1->2,1->2,2->3,2->3,3
3:1,1->2,1->2,2->2,3->3,3
4:1,1->1,2->2,2->3,2->3,3
5:1,1->1,2->2,2->2,3->3,3
6:1,1->1,2->1,3->2,3->3,3

难度.....一般般

#include 
#include 
#include 
#include 
#include 

using namespace std;

//int m[10][10]; //地图矩阵,表示是否走过[x][y]点(1/0)
int g_x,g_y,ans=1;
struct pos
{
	int x;
	int y;
};
void dfs(int x,int y,vector v1)
{
	
	if(x == g_x && y == g_y)
	{
		//成功走出迷宫
		cout << ans << ':' << v1.front().x << ',' << v1.front().y;
		for(int i=1;i" << v1[i].x << ',' << v1[i].y;
		ans++;
		cout << endl;
	}
	//先向下
	if(x < g_x)
	{
		//不越界
		v1.push_back((pos) {x+1,y});
		dfs(x+1,y,v1); //向下走
		v1.pop_back();
	}
	if(y < g_y)
	{
		v1.push_back((pos) {x,y+1});
		dfs(x,y+1,v1); //右边
		v1.pop_back();
	}
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	//10^n+1
	cin >> g_x >> g_y;
	vector v1;
	v1.push_back((pos) {1,1});
	dfs(1,1,v1);
	return 0;
}

做大做强,再创辉煌!

题解第5篇!

上一篇: 同构数判断(jincheng.li的博客)

你可能感兴趣的:(#,oj题解,算法,数据结构,c++)