1. 程式人生 > >蛇形填數的遞迴實現

蛇形填數的遞迴實現

分治的思想真有些神奇。。。
<span style="font-family:Courier New;font-size:18px;">#include <iostream>
using namespace std;

const int maxn=20;
int a[maxn][maxn];

void draw(int x,int y,int start,int size)
{
    if(size<=0) return;
    int t1=x,t2=y;
    for(int i=x;i<t1+size-1;i++){
        a[i][y]=start;
        start++;
    }
    x=t1+size-1;

    for(int j=y;j<t2+size-1;j++) {
        a[x][j]=start;
        start++;
    }
    y=t2+size-1;

    for(int i=x;i>t1;i--) {
        a[i][y]=start;
        start++;
    }
    x=t1;

    for(int j=y;j>t2;j--) {
        a[x][j]=start;
        start++;
    }
    x=t1+1;
    y=t2+1;
    draw(x,y,start,size-2);
}
int main()
{
    int n;
    cin>>n;
    draw(0,0,1,n);
    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}</span>

相關推薦

蛇形實現

分治的思想真有些神奇。。。<span style="font-family:Courier New;font-size:18px;">#include <iostream> u

簡單蛇形

時間限制:1000 ms  |  記憶體限制:65535 KB 【問題描述】 peter喜歡玩字母遊戲,於是他編寫了一個有趣的遊戲。遊戲規則是在一個 (N-1) * N的表格裡填寫字母,規則:對於每個

實現制轉換(2-16)

  public static String baseString(int n,int b) { String str="", strBt="0123456789abcdef"; if(n<=0) { return ""; }else { str=ba

使用實現斐波那契列中的20個月有多少隻兔子

package it.casts.homework; //5.使用遞迴實現斐波那契列數中的20個月有多少隻兔子; public class Test05 { public static void main(String[] args) { int method = method(20);

演算法奧祕之陣列實現開燈問題、蛇形

哈哈哈,時隔n個月,今天看了劉汝佳老師的《演算法入門經典》,感覺厲害了,忍不住想要分享給大家,於是再次開啟寄幾小小的部落格 學c語言也有一段時間了,逐漸發現,演算法才是語言的精髓!於是拿起小本本,開始探索,今天是第一篇,以後或許還有下集哈哈哈 question1:開燈問題

斐波那契--和非實現

斐波那契數列是猶如0、1、1、2、3、5、8、·····、fn這樣的數,從前書本上一般介紹的方法都是遞迴的方法 遞迴方法實現: public static int FibonacciDigui(int n){ if (n == 0) { return 0;

將一個十進位制轉換成二進位制輸出--實現

#include <iostream> using namespace std; void WriteBinary(int n) { if(n==0||n==1) cout<<n; else { WriteBinary(n/2); cout<

利用實現動態指定圈層

  x從一個大於0的數開始遞減,在減到-1前,每呼叫一次cycle(int)都會有一個迴圈,並且在這個迴圈的迴圈體用遞迴呼叫了cycle(int)自己,我們都知道函式的執行結束標誌是return或},當然有時候會因throw而中止,那麼在這次遞迴呼叫未結束用,這個迴圈被掛起了,這就相當於前面的那個直接迴圈巢狀

如何使用Python的方法來實現組合數,實現斐波那契

組合數公式: C(n,m)=n!/((n-m)!*m!) 傳統演算法 def CombinationNum(n,m):     #n>=m n,m都是自然數     #找到一個出口     if m == 0 or n == m:         return

C語言與非實現求第n個斐波那契

一、非遞迴實現第N個菲波那切數列: 程式如下: #include <stdio.h> int fib(int n) { int a1 = 1; int a2 = 1; int a3

蛇形蛇形(基礎模擬練習)

code 練習 color 順序 printf urn pri int 蛇形填數 1 /* 2 問題 輸入矩陣的規模n,先將數按照下,右,上,左的順序填入矩陣,再按照這樣的順序取出。 3 解題思路 模擬,按照筆的順序存入取出,註意初始化的時候一定將矩陣全部初始化。

蛇形

amp size ace define max 要求 移動 循環控制 src 在n*n的方陣裏填入1,2,...,n*n,要求甜填成蛇形。 我的程序 #include<iostream>#include<string.h>using nam

資料結構練習之用棧來實現5的階乘#C語言實現

剛學資料結構,給大家分享一下今天學習資料結構的棧中的一個練習 也算是順便記錄一下學習過程 #include <stdio.h> typedef struct StackNode { int vn; //儲存n的值 int vf; //儲存fun(n)的值 int t

C語言經典演算法(九)——實現二分查詢的兩種方法

後繼續整理演算法並寫出自己的理解和備註。 C++實現的:遞迴實現二分查詢演算法 1、 遞迴實現二分查詢 <1> 題目描述:針對資料,進行二分查詢(要求:資料的排列有序) <2> 方法一:概念法 <3> 方法二:遞迴法 原始碼: 一、 遞迴實現

C語言經典演算法(八)——實現斐波那契數列的兩種方法

後繼續整理演算法並寫出自己的理解和備註。 C++實現的:遞迴實現斐波那契數列 1、 遞迴實現斐波那契數列Fib(n) <1> 題目描述:輸入n值,求解第n項的斐波那契數列值 <2> 方法一:概念法 <3> 方法二:遞迴法 斐波那契數列值是值1

C語言經典演算法(七)——實現階乘演算法的兩種方法

今後繼續整理演算法並寫出自己的理解和備註。 C++實現的:遞迴實現階乘演算法N! 1、 遞迴實現n! <1> 題目描述:輸入n值,求解n的階乘 <2> 方法一:累乘法 <3> 方法二:遞迴法 原始碼: 一、 遞迴實現n! 1、 累乘法 #

二叉樹非實現

二叉樹非遞迴實現會比較難理解一點,不過只要理解了非遞迴的,那麼遞迴的就非常好理解了。接下來進行圖文詳解。 C程式碼下載 C++程式碼下載 java程式碼下載 ( 備用地址下載) 導航 1.建立二叉樹 2.前序遍歷二叉樹 3.中序遍歷二叉樹 4.後序遍歷二叉

二叉樹實現

二叉樹遞迴實現比較符合樹的特點,也較容易理解,程式碼也較為簡單。接下來進行圖文詳解。 C程式碼下載 C++程式碼下載 java程式碼下載 ( 備用地址下載) 導航 1.建立二叉樹 2.前序遍歷二叉樹 3.中序遍歷二叉樹 4.後序遍歷二叉樹 5.層次遍歷

實現逆轉連結串列

//遞迴實現逆轉連結串列 ListNode *reverseLink2(ListNode *head) { ListNode *newHead; if(head->next==NULL) return head; newHead=reverseLink2

python 迭代法和 實現斐波那契演算法

題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 1.程式分析: 兔子的規律為數列1,1,2,3,5,8,13,21…. 由規律可知: f(n) = f(n-1)+f(n-2) 符合斐波那契數