Board covering problem

来源:互联网 发布:form表单怎么提交数据 编辑:程序博客网 时间:2024/04/27 23:34

Good morning.everyone.Yesterday i said today i will give you some harder problems solved by divide and conquer.And here it is,The Board covering problem.The code is wrote by myself,and it is not simple enough.So if you can simplify it,please share with me.

Have fun coding,i_human.Have fun coding,everyone!

THE CODE:


#include "stdafx.h"
#include<iostream>
#define a1 1000


int z=1;
int a[a1][a1];


using namespace std;


void cover(int m,int n,int o,int p,int x,int y);


int main()
{
int k;
int i,j;
int l=1;
cin>>k>>i>>j;
a[i][j]=0;
for(int l1=0;l1<k;l1++)
l=l*2;
cover(0,l-1,0,l-1,i,j);
for(int i1=0;i1<l;i1++)
{
for(int i2=0;i2<l;i2++)
cout<<a[i1][i2]<<" ";
cout<<endl;
}
system("pause");
return 0;
}


void cover(int m,int n,int o,int p,int x,int y)
{
if(n-m==1 && p-o==1)
{
int c=a[x][y];
a[m][o]=a[m][p]=a[n][o]=a[n][p]=z;
z++;
a[x][y]=c;
}
else
{
if(x<=(m+n)/2 && y<=(o+p)/2)
{
a[(m+n)/2][(o+p)/2+1]=a[(m+n)/2+1][(o+p)/2]=a[(m+n)/2+1][(o+p)/2+1]=z;
z++;
cover(m,(m+n)/2,o,(o+p)/2,x,y);
cover(m,(m+n)/2,(o+p)/2+1,p,(m+n)/2,(o+p)/2+1);
cover((m+n)/2+1,n,o,(o+p)/2,(m+n)/2+1,(o+p)/2);
cover((m+n)/2+1,n,(o+p)/2+1,p,(m+n)/2+1,(o+p)/2+1);
}
if(x<=(m+n)/2 && y>(o+p)/2)
{
a[(m+n)/2][(o+p)/2]=a[(m+n)/2+1][(o+p)/2]=a[(m+n)/2+1][(o+p)/2+1]=z;
z++;
cover(m,(m+n)/2,o,(o+p)/2,x,y);
cover(m,(m+n)/2,o,(o+p)/2,(m+n)/2,(o+p)/2);
cover((m+n)/2+1,n,o,(o+p)/2,(m+n)/2+1,(o+p)/2);
cover((m+n)/2+1,n,(o+p)/2+1,p,(m+n)/2+1,(o+p)/2+1);
}
if(x>(m+n)/2 && y>(o+p)/2)
{
a[(m+n)/2][(o+p)/2]=a[(m+n)/2+1][(o+p)/2]=a[(m+n)/2][(o+p)/2+1]=z;
z++;
cover(m,(m+n)/2,o,(o+p)/2,x,y);
cover(m,(m+n)/2,o,(o+p)/2,(m+n)/2,(o+p)/2);
cover((m+n)/2+1,n,o,(o+p)/2,(m+n)/2+1,(o+p)/2);
cover(m,(m+n)/2,(o+p)/2+1,p,(m+n)/2,(o+p)/2+1);
}
if(x>(m+n)/2 && y<=(o+p)/2)
{
a[(m+n)/2][(o+p)/2]=a[(m+n)/2+1][(o+p)/2+1]=a[(m+n)/2][(o+p)/2+1]=z;
z++;
cover(m,(m+n)/2,o,(o+p)/2,x,y);
cover(m,(m+n)/2,o,(o+p)/2,(m+n)/2,(o+p)/2);
cover((m+n)/2+1,n,(o+p)/2+1,p,(m+n)/2+1,(o+p)/2+1);
cover(m,(m+n)/2,(o+p)/2+1,p,(m+n)/2,(o+p)/2+1);
}
}
}
0 0
原创粉丝点击