分治法-簡單矩陣
輸出如下所示N*N(1<=N<=10)的數學方陣
輸入:6
輸出:
1 20 19 18 17 16
2 21 32 31 30 15
3 22 33 36 29 14
4 23 34 35 28 13
5 24 25 26 27 12
6 7 8 9 10 11
思路:利用分治法,逐層填數,先填最外層:
1 20 19 18 17 16
2 15
3 14
4 13
5 12
6 7 8 9 10 11
實現代碼:
#include<stdio.h> int data[1000][1000]; void Full(int number,int begin,int size) { //從number開始填寫size方陣,左上角的下標為(begin,begin) int i,j,k; if(size==0) return; if(size==1) { data[begin][begin]; return; } i=begin;j=begin; for(k=0;k<size-1;k++)//填寫左側的數字 { data[i][j]=number; number++;i++; } for(k=0;k<size-1;k++)//填寫下側的數字 { data[i][j]=number; number++;j++; } for(k=0;k<size-1;k++)//填寫右側的數字 { data[i][j]=number; number++;i--; } for(k=0;k<size-1;k++)//填寫上側的數字 { data[i][j]=number; number++;j--; } Full(number,begin+1,size-2);//遞歸求解,左上角下標為begin+1 //下一次每一行填寫的數字個數是上一次的數字個數減去2; } int main() { int i,j,n,m; scanf("%d",&n); Full(1,0,n); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%4d",data[i][j]); puts(""); } return 0; }
最後更新:2017-04-03 12:55:52