有一个N*N的方阵,如图要求如图数出这个方阵
首先我们讲讲分治法,分治,分治,分而治之
我们将这张图片分为这样
1,2,3,4,5这列为一组 输入时候,只需要行数加1
6,7,8,9,10这行为一组 输入时候,只需要列数加1
11,12,13,14,15这行为一组 输入时候,只需要行数减1
16,17,18,19,20这行为一组 输入时候,只需要列数减1
此为分而治之
#include<stdio.h>
#define n 10
int data[n][n]={0};
void full(int number,int begin,int size);
void outprint(int size);
int main(){
int a;
printf("输入阶数小于10");
scanf("%d",&a);
full(1,0,a);
outprint(a);
return 0;
}
void full(int number,int begin,int size){
int i,j,k;
if(size==0)
return;
if(size==1){
data[begin][begin]=number;
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); //我唯一不太明白的是为什么是size-2,最后才知道,每次完了之后上面最上面那一阶和最下面那一阶<span style="white-space:pre"> </span>//都有内容这样就损失了两阶
return ;
}
void outprint(int size){
int i,j;
for(i=0;i<size;i++){
for(j=0;j<size;j++){
printf("%4d",data[i][j]);
}printf("\n");
}
return ;
}
本文详细介绍了使用分治法解决N*N方阵中元素计数的问题,通过将大矩阵分解为小矩阵组进行递归操作,最终得出总数。包括算法实现、代码解析及实例演示。
1571

被折叠的 条评论
为什么被折叠?



