追梦算法----卒的遍历
说明在一张n*m的棋盘上(如6行7列)的最左上角(1,1)的位置有一个卒。该卒只能向下或者向右走,且卒采取的策略是先向下,下边走到头就向右,请问从(1,1)点走到(n,m)点可以怎样走,输出这些走法。输入格式两个整数n,m代表棋盘大小(3=<n<=8,3<=m<=8)输出格式卒的行走路线样例输入数据 13 3Copy输出数据 11:1,1->2,1->3,1-&
·
说明
在一张n*m的棋盘上(如6行7列)的最左上角(1,1)的位置有一个卒。该卒只能向下或者向右走,且卒采取的策略是先向下,下边走到头就向右,请问从(1,1)点走到(n,m)点可以怎样走,输出这些走法。
输入格式
两个整数n,m代表棋盘大小(3=<n<=8,3<=m<=8)
输出格式
卒的行走路线
样例
输入数据 1
3 3
Copy
输出数据 1
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
dfs模板
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
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() {
scanf("%d%d",&n,&m);
dfs(1,1,0);
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)