【基础】卒的遍历(DFS)

题目描述

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

输入

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

输出

卒的行走路线

样例输入 复制
复制代码
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

代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int n,m,ans=0,vis[15][15];
int dx[4]= {1,0},dy[4]= {0,1};
struct te {
	int dx;
	int dy;
};
te a[20];
void dfs(int x,int y,int step) {
	if(x==n&&y==m) {
		a[step].dx=x;
		a[step].dy=y;
		ans++;
		cout<<ans<<":"<<a[0].dx<<","<<a[0].dy;
		for (int i=1; i<=step; i++) {
			cout<<"->"<<a[i].dx<<","<<a[i].dy;
		}
		cout<<endl;
	}
	vis[x][y]=1;
	a[step].dx=x;
	a[step].dy=y;
	for (int i=0; i<2; i++) {
		int tx=x+dx[i],ty=y+dy[i];
		if(tx>0&&ty>0&&tx<=n&&ty<=m&&vis[tx][ty]==0) {
			step++;
			dfs(tx,ty,step);
			vis[tx][ty]=0;
			step--;
		}
	}
}
int main() {
    cin>>n>>m;
	dfs(1,1,0);
	return 0;
}
相关推荐
其实防守也摸鱼3 分钟前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
旖旎夜光32 分钟前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
小超人诞生日记1 小时前
C++ 智能指针的使用及其原理详解
c++·算法
akinggw2 小时前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
繁星蓝雨3 小时前
C++设计原理———多重继承(虚基类、菱形继承、委托、重命名、基类和成员初始化)
c++·委托·多重继承·mi·显式初始化列·虚基类·对象布局
旖旎夜光4 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
扶尔魔ocy5 小时前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
AiNightVision5 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.3335 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn