1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; int a[50][50];//存放所有走过的路径 bool f[50][50];//标记某个点是否走过 int n,c;//n行,m列的棋盘 //fx代表x坐标可能的变化 //四个方向:下、右、上、左 int fx[4] = {0,1,0,-1}; //fy代表y坐标可能的变化 int fy[4] = {1,0,-1,0}; //x代表a数组中元素的个数 void print(int x){ c++; cout<<c<<":"; int i; for(i = 1;i <= x;i++){ //如果不是最后一个解 if(i != x){ cout<<a[i][1]<<","<<a[i][2]<<"->"; }else{ cout<<a[i][1]<<","<<a[i][2]<<endl; } } } //k代表向二维数组a中填值的下标 void fun(int k){ //dx,dy代表准备走的点的坐标 int i,dx,dy; //循环所有可能的解 for(i = 0;i < 4;i++){ //准备走的点:在上一个点的坐标上向下或者向右 dx = a[k-1][1] + fx[i]; dy = a[k-1][2] + fy[i]; //判断新坐标的正确性(在棋盘内,且没走过) if(dx <= n && dy <= n && dx >= 1 && dy >= 1 && f[dx][dy] == false){ //标记该点走过 f[dx][dy] = true; //存储该点的坐标 a[k][1] = dx; a[k][2] = dy; //如果到了目的地 if(dx == n && dy == n){ print(k); }else{ fun(k+1); } //回溯:重新标记该点没有走过 f[dx][dy] = false; } } } int main(){ cin>>n; //a数组从下标为1开始存储 a[1][1] = 1; a[1][2] = 1; f[1][1] = true;//1,1点标记为走过了 fun(2); }
- 1
信息
- ID
- 659
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者