用递归解决蛇形填数的问题
2017-08-02 08:23
134 查看
题目:来自南阳理工学院oj
本文提出一种递归的方法,可供参考。
我们分析一下这个蛇形矩阵的形成过程:先由右侧起第一列由上到下填写(矩阵元素数字递增),到达规定的个数后,自右向左填写(矩阵元素数字递增),到达规定个数后,由下到上填写(矩阵元素数字递增),此时,矩阵的侧面与底已经填写完毕。然后填写剩余部分,此时填数呈现规律:先由左到右填,到尽头后由上到下,再由右向左,再由下到上,到矩阵中所有元素都被填满为止。在侧面与底填写完毕的情况下,填写剩余部分可以看成一个递归的过程。都是左-右,上-下,右-左,下-上的过程。
我们分析一下递归的退出条件:矩阵中所有元素都填写完毕,此时开始写代码。
分两步:1 :填写侧面与底部
2:填写剩余部分(递归)
下面附上代码:匆忙AC,代码不是很精炼,仅供参考。
附上时间以及内存:
本文提出一种递归的方法,可供参考。
我们分析一下这个蛇形矩阵的形成过程:先由右侧起第一列由上到下填写(矩阵元素数字递增),到达规定的个数后,自右向左填写(矩阵元素数字递增),到达规定个数后,由下到上填写(矩阵元素数字递增),此时,矩阵的侧面与底已经填写完毕。然后填写剩余部分,此时填数呈现规律:先由左到右填,到尽头后由上到下,再由右向左,再由下到上,到矩阵中所有元素都被填满为止。在侧面与底填写完毕的情况下,填写剩余部分可以看成一个递归的过程。都是左-右,上-下,右-左,下-上的过程。
我们分析一下递归的退出条件:矩阵中所有元素都填写完毕,此时开始写代码。
分两步:1 :填写侧面与底部
2:填写剩余部分(递归)
下面附上代码:匆忙AC,代码不是很精炼,仅供参考。
#include<iostream> using namespace std; int a[1000][1000]={0}; int init(int n) { int i; for(i=0;i<n;i++) { a[i][n-1]=i+1; } i=i+1; for(int j=n-2;j>=0;j--) { a[n-1][j]=i++; } for(int k=n-2;k>=0;k--) { a[k][0]=i++; } return i; } int drawSnake(int N,int i) { bool flag=false; int a1,b; for(a1=0;a1<N;a1++) { for( b=0;b<N;b++) { if(a[a1][b]==0) { flag=true; break; } } if(flag) { break; } } if(!flag) { return 0; } { int c=a1; i=i+1; for(int l=b;;l++) { if(a[c][l]==0) { a[c][l]=i++; }else { for(int m=c+1;;m++) { if(a[m][l-1]==0) { a[m][l-1]=i++; }else { for(int n=m-2;n>=0;n--) { if(a[m-1] ==0) { a[m-1] =i++; }else { for(int p=m-2;p>=0;p--) { if(a[p][n+1]==0) { a[p][n+1]=i++; }else { i=i-1; return drawSnake(N,i); } } } } } } } } } } void show(int n) { for(int i=0;i<n;i++) { for(int j=0;j<n-1;j++) { cout<<a[i][j]<<" "; } cout<<a[i][n-1]<<endl; } } void fun(int c) { return; } int main() { int x; cin>>x; fun(drawSnake(x,init(x)-1)); show(x); //system("pause"); return 0; }
附上时间以及内存:
相关文章推荐
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 非递归解决组合问题
- 利用递归解决全排列问题
- Java 递归解决 "汉诺塔" 问题
- 迭代、递归解决斐波纳挈数列问题
- python递归解决经典汉若塔问题
- 数学归纳解决递归问题
- 递归的定义以及递归的示例(计算阶乘、计算斐波那契数、递归二分查找、回文串递归方法解决、汉诺塔问题、递归选择排序问题)
- 栈和递归---解决迷宫问题
- 典型递归的思想解决汉诺塔问题
- 递归解决 Tower of Hanoi 问题
- Python递归解决汉诺塔问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 用递归解决问题
- 数据结构:整数划分问题 + DFS递归解决
- 用递归的方法和非递归方法解决8皇后问题
- Python初学笔记:递归解决汉诺塔问题
- 递归解决汉诺塔问题C++
- 使用Python来解决卡诺塔即递归问题