分治法:
数字旋转方阵问题
#include<stdio.h>
#include <iostream>
#include<iomanip>
using namespace std;
int data[5][5];
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);
}
void main(){
Full(1,0,5);
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
cout<<setw(4)<<data[i][j];
cout<<'\n';
}
}
运行结果:
如有转载,需要告知